Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> ระบบ >> Windows Server

ติดตั้ง PowerShell Modules แบบ Offline (ไม่มี Internet Access)

PowerShell Modules ยอดนิยมส่วนใหญ่ติดตั้งออนไลน์จาก Repository PowerShell Gallery (PSGallery) ด้วยคำสั่ง Install-Module แต่จะติดตั้งไม่ได้หากคอมพิวเตอร์อยู่ใน Isolated Network หรือจำกัดการเข้าถึง PSRepository โดยตรง เหมือนกันเมื่อพยายามติดตั้ง Module บน Windows Server Hosts ที่มักบล็อก Internet Access โดยตรง บทความนี้แสดงวิธีติดตั้ง PowerShell Modules แบบ Offline และ Import Module จากคอมพิวเตอร์ระยะไกล (เช่น SQLServer Management PoSh Module)

โปรดทราบว่าไม่มี Direct Links สำหรับดาวน์โหลด Modules จาก PowershellGallery.com สิ่งเดียวที่ดาวน์โหลดได้คือ NuGet Package (ไฟล์ .nupkg) สามารถติดตั้ง Module จาก NUPKG File ได้ แต่จะไม่ใช่การติดตั้ง Module สมบูรณ์ (ปัญหาหลักคือ Dependencies ไม่ได้ Resolve)

ติดตั้ง PowerShell Modules แบบ Offline (ไม่มี Internet Access)

วิธีติดตั้ง PowerShell Modules บนคอมพิวเตอร์ Offline

ขั้นแรก ติดตั้ง PowerShell Module ที่ต้องการบนคอมพิวเตอร์ที่มี Internet Access

ต้องมี PowerShell Version 5.1 หรือใหม่กว่าบนคอมพิวเตอร์:

$PSVersionTable.PSVersion

ตรวจสอบว่า Module มีอยู่ใน PSGallery:

Find-Module –Name *SqlServer*| Select Name, Version, Repository

ติดตั้ง PowerShell Modules แบบ Offline (ไม่มี Internet Access)

ดาวน์โหลด Module ไปยัง Local Folder ที่ระบุ:

Save-Module –Name SqlServer –Path C:\PS\

ติดตั้ง PowerShell Modules แบบ Offline (ไม่มี Internet Access)

คัดลอกโฟลเดอร์ไปยังคอมพิวเตอร์อีกเครื่องที่ต้องการติดตั้ง Module

ดูว่า PowerShell Modules เก็บอยู่ที่โฟลเดอร์ไหน:

$env:PSModulePath -split ";"

ติดตั้ง PowerShell Modules แบบ Offline (ไม่มี Internet Access)

PowerShell Modules อยู่ที่ Path ต่อไปนี้:

  • C:\Users\username\Documents\WindowsPowerShell\Modules ($Home\Documents\PowerShell\Modules) – Modules ในโฟลเดอร์นี้ใช้ได้เฉพาะ User นี้ (CurrentUser)
  • C:\Program Files\WindowsPowerShell\Modules ($Env:ProgramFiles\WindowsPowerShell\Modules) — Path ใช้ติดตั้ง Module ให้ User ทุกคนบนคอมพิวเตอร์ (-Scope AllUsers)
  • C:\Windows\system32\WindowsPowerShell\v1.0\Modules – โฟลเดอร์ Default สำหรับ Built-in Modules

คัดลอก Module ไปที่ C:\Program Files\WindowsPowerShell\Modules

ติดตั้ง PowerShell Modules แบบ Offline (ไม่มี Internet Access)

ตรวจสอบว่า SQLServer Module พร้อมใช้งาน:

Get-Module -Name SQLServer -ListAvailable

ติดตั้ง PowerShell Modules แบบ Offline (ไม่มี Internet Access)

ดู Module Directory ได้ดังนี้:

(Get-Module -ListAvailable SQLServer).path

ติดตั้ง PowerShell Modules แบบ Offline (ไม่มี Internet Access)

แสดงรายการ Commands ที่มีใน Module: Get-Command -Module SQLServer

วิธีเดียวกันนี้ใช้ติดตั้ง Module อื่นๆ ได้ ผมใช้ติดตั้ง SQLServer, PSWindowsUpdate, หรือ PowerCLI สำหรับ VMWare บ่อย

ด้วยเหตุผลที่ชัดเจน ไม่ควรติดตั้ง AzureAD และ Exchange Online PowerShell Modules บนอุปกรณ์ Offline

Import PowerShell Module จากคอมพิวเตอร์ระยะไกล

หากไม่ต้องการติดตั้ง Module บนคอมพิวเตอร์ทุกเครื่อง สามารถ Import Module ใดๆ จากคอมพิวเตอร์ระยะไกลผ่าน PSRemoting:

$session = New-PSSession -ComputerName dub-sql1

แสดงรายการ Modules ที่ติดตั้งบนคอมพิวเตอร์ระยะไกล:

Get-Module -PSSession $session –ListAvailable

Import PowerShell Module ที่ระบุไปยังคอมพิวเตอร์ของคุณ:

Import-Module -PSsession $session -Name SqlServer

อย่าลืมปิด Session เมื่อเสร็จสิ้น:

Remove-PSSession $session

อีกวิธีน่าสนใจคือใช้ PowerShell Module ที่ติดตั้งบน Remote Computer ผ่าน Implicit Remoting

เชื่อมต่อ Remote Computer ด้วย Invoke-Command และ Import Module ที่ต้องการ:
$session = New-PSSession -ComputerName dub-sql1
Invoke-Command {Import-Module SqlServer} -Session $session

Export Module Cmdlets จาก Remote Session ไปยัง Local Module:

Export-PSSession -Session $s -CommandName *-Sql* -OutputModule RemoteSQLServer -AllowClobber

คำสั่งสร้าง PowerShell Module ใหม่ชื่อ RemoteSQLServer บนคอมพิวเตอร์ของคุณ (ใน C:\Program Files\WindowsPowerShell\Modules) ไฟล์ Cmdlet เองไม่ถูกคัดลอก

ปิด Session:

Remove-PSSession $session

จากนั้นเพื่อใช้ Cmdlets จาก Module นี้ เพียง Import เข้า Session:

Import-Module RemoteSQLServer

SQL Module Cmdlets ทั้งหมดพร้อมใช้งานโดยไม่ต้องสร้าง Connection ไปยัง Remote Computer โดยตรง ลอง Query MS SQL Database ด้วย Invoke-Sqlcmd ทุก MSSQL Commands พร้อมใช้งานจนกว่าจะปิด PowerShell Console หรือ Remove Module