Powershell Modul per remote installieren
Wenn es in einer geschlossen Umgebung (Netzwerk) kein Zugang zum Internet gibt, so können Powershellmodule auch offline installiert werden. Von Computer zu Computer (Server/Client).
Vorausgesetzt das entsprechende Modul ist auf irgendeinem Computer im Netzwerk vorhanden.
Download und Installation Powershell Modul
In diesem Beispiel lade ich das Powershellmodul “SQLServer” von/auf einem gesicherten Computer mit Zugang zum Internet herunter.
Prüfen der Mindestanforderung (v5.1):
$PSVersionTable.PSVersion
Suchen nach dem individuellen Modul (SQLServer):
Sollte NuGet nicht installiert sein, wird die Installation als Voraussetzung angeboten.
Find-Module -Name *SqlServer*| Select Name, Version, Repository
Speichern des Moduls auf dem gesicherten Computer nach Laufwerk E:\:
Save-Module -Name SqlServer -Path E:\PSModule\
Nach dem Download des Moduls, stellen wird es auch lokal auf dem System bereit. Dazu kopieren wir den (Download-) Ordner “SQLServer” in den Pfad ProgramFiles\WindowsPowerShell\Modules.
xcopy E:\PSModule\ $Env:ProgramFiles\WindowsPowerShell\Modules /E/H
Remote Powershell Module Offline Install
Damit nun Server oder Clients ohne Zugang zum Internet an das Modul kommen, gehen wir wie folgt vor:
Stellen eine Remoteverbindung zu dem gesicherten Computer (Name “DB”) her. Schön wäre natürlich wenn WinRM per SSL konfiguriert ist.
$session = New-PSSession -ComputerName DB
Können über die gestartete Remotesession die lokal vorhandenen Module abfragen:
Get-Module -PSSession $session -ListAvailable
Importieren nun das Powershellmodul “SQLServer” über die gestartete Remotesession in die vorhandene Session.
Invoke-Command {Import-Module SqlServer} -Session $session
Und nun exportieren wir das Powershellmodul auf den lokalen Server namens “FI” unter dem Namen RemoteSQLServer. Der Name kann auch SQLServer lauten. Nur so lässt es sich besser unterscheiden.
Export-PSSession -Session $session -CommandName *-Sql* -OutputModule RemoteSQLServer -AllowClobberRemove-PSSession $session
Die Remotesession wird nun beendet.
Remove-PSSession $session