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
ขั้นแรก ติดตั้ง PowerShell Module ที่ต้องการบนคอมพิวเตอร์ที่มี Internet Access
ต้องมี PowerShell Version 5.1 หรือใหม่กว่าบนคอมพิวเตอร์:
$PSVersionTable.PSVersion
ตรวจสอบว่า Module มีอยู่ใน PSGallery:
Find-Module –Name *SqlServer*| Select Name, Version, Repository

ดาวน์โหลด Module ไปยัง Local Folder ที่ระบุ:
Save-Module –Name SqlServer –Path C:\PS\

คัดลอกโฟลเดอร์ไปยังคอมพิวเตอร์อีกเครื่องที่ต้องการติดตั้ง Module
ดูว่า PowerShell Modules เก็บอยู่ที่โฟลเดอร์ไหน:
$env:PSModulePath -split ";"

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

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

ดู Module Directory ได้ดังนี้:
(Get-Module -ListAvailable SQLServer).path

แสดงรายการ 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