Enter-PSSession, Invoke-Command: PowerShell remote ausführen

    Remote-ManagementMit PowerShell lassen sich nicht nur Aufgaben auf lokalen Rechnern automatisieren, viel­mehr kann man auch Befehle auf Remote-PCs ab­setzen. Zwar erfordern einige Cmdlets dafür kei­ne Konfiguration der entfernten Rechner, für die volle Funktionalität benötigt man aber WinRM. Dieses lässt sich effizient über GPOs aktivieren.

    Möchte man ein Script auf vielen PCs eines Netzwerks ausführen, dann wird man den betreffenden PowerShell-Code bevorzugt in Login-Scripts verpacken. Ist dies nicht erwünscht oder nicht möglich (etwa weil die PCs keiner Domäne angehören), dann lassen sich einzelne Befehle oder ganze Funktionen manuell auf eine Vielzahl von Rechnern anwenden.

    Cmdlets mit Remote-Unterstützung

    Im Fall von einzelnen Kommandos lässt sich recht einfach herausfinden, ob sie die Ausführung auf einem entfernten System erlauben. Dies ist dann der Fall, wenn sie den Parameter -Computername unterstützen. Dies trifft etwa auf Cmdlets für WMI bzw. CIM zu, so dass auf diesem Weg viele Remote-Operationen möglich sind.

    Eine Liste der Cmdlets, die den Parameter -Computername akzeptieren, lässt sich einfach mit dem Befehl

    Get-Command | Where {$_.parameters.keys -contains "ComputerName"}

    anzeigen. Dabei ist zu beachten, dass PowerShell nur die Cmdlets von geladenen Modulen berücksichtigt.

    Session auf Remote-PCs starten

    Möchte man eine interaktive Session auf einem Remote-PC öffnen oder dort Cmdlets ausführen, die den Parameter -Computername nicht unterstützen, dann bietet PowerShell auch dafür Mechanismen an. Eine interaktive Kommandozeile lässt sich auf entfernten Systemen mit

    Enter-PSSession <Computer-Name>

    öffnen, beendet wird sie mit Exit-PSSession. Die PowerShell_ISE enthält zu diesem Zweck im Menü Datei den Befehl Neue Remote-PowerShell-Registerkarte, der ein neues Fenster öffnet und in einem Dialog nach dem Namen des entfernten Rechners und den Anmeldedaten fragt.

    In der PowerShell_ISE fällt es leicht, eine neue Remote-Session zu starten.

    Will man nur einzelne Kommandos ausführen, ohne eine interaktive Shell zu öffnen, dann kann man dies mit Invoke-Command tun. Der Aufruf erfolgt in der Form

    Invoke-Command -Computername Server-1, Server-2 {Befehle}

    Dieses Cmdlet eignet sich auch dafür, Scripts auf Remote-PCs auszuführen. Dafür übergibt man ihm mittels -filepath den Pfad zur Script-Datei, die Befehlssequenz in den geschweiften Klammern entfällt dann.

    Keine Kommentare