Ausführen von Remotebefehlen
Mit einem einzigen PowerShell-Befehl können Sie Befehle auf einem oder Hunderten von Computern ausführen. Windows PowerShell unterstützt Remote computing mit verschiedenen Technologien, einschließlich WMI, RPC und WS-Management.
PowerShell unterstützt WMI, WS-Verwaltung und SSH-Remoting. In PowerShell 7 und höher wird RPC nur unter Windows unterstützt.
Weitere Informationen zum Remoting in PowerShell finden Sie in den folgenden Artikeln:
Windows PowerShell-Remoting ohne Konfiguration
Viele Windows PowerShell-Cmdlets enthalten den Parameter ComputerName, mit dem Sie auf einem oder mehreren Remotecomputern Daten erfassen und Einstellungen ändern können. Diese Cmdlets verwenden unterschiedliche Kommunikationsprotokolle und funktionieren auf allen Windows-Betriebssystemen ohne besondere Konfiguration.
Zu diesem Cmdlets zählen:
- Restart-Computer
- Test-Connection
- Clear-EventLog
- Get-EventLog
- Get-HotFix
- Get-Process
- Get-Service
- Set-Service
- Get-WinEvent
- Get-WmiObject
Cmdlets, die Remoting ohne besondere Konfiguration unterstützen, enthalten in der Regel den Parameter ComputerName und nicht den Parameter Session. Um diese Cmdlets in Ihrer Sitzung zu finden, geben Sie Folgendes ein:
Get-Command | Where-Object {
$_.Parameters.Keys -contains "ComputerName" -and
$_.Parameters.Keys -notcontains "Session"
}
Windows PowerShell-Remotenutzung
Über das WS-Management-Protokoll können Sie mit Windows PowerShell-Remoting jeden Windows PowerShell-Befehl auf einem oder mehreren Remotecomputern ausführen. Sie können dauerhafte Verbindungen herstellen, interaktive Sitzungen starten und Skripts auf Remotecomputern ausführen.
Um Windows PowerShell-Remoting zu verwenden, muss der Remotecomputer für die Remoteverwaltung konfiguriert sein. Weitere Informationen und Anweisungen hierzu finden Sie unter Informationen zu Remoteanforderungen.
Nachdem Sie Windows PowerShell-Remoting konfiguriert haben, stehen Ihnen viele Remotingstrategien zur Verfügung. In diesem Artikel werden nur einige davon aufgeführt. Weitere Informationen finden Sie unter Informationen zu Remote.
Starten einer interaktiven Sitzung
Um eine interaktive Sitzung mit einem einzelnen Remotecomputer zu starten, verwenden Sie das Cmdlet Enter-PSSession. Um beispielsweise eine interaktive Sitzung mit dem Remotecomputer „Server01“ zu starten, geben Sie Folgendes ein:
Enter-PSSession Server01
Die Eingabeaufforderung ändert sich, und es wird der Name des Remotecomputers angezeigt. Alle Befehle, die Sie an der Eingabeaufforderung eingeben, werden auf dem Remotecomputer ausgeführt, und die Ergebnisse werden auf dem lokalen Computer angezeigt.
Um die interaktive Sitzung zu beenden, geben Sie Folgendes ein:
Exit-PSSession
Weitere Informationen zu den Enter-PSSession
Cmdlets und Exit-PSSession
finden Sie unter:
Ausführen eines Remotebefehls
Zum Ausführen eines Befehls auf einem oder mehreren Computern verwenden Sie das Cmdlet Invoke-Command. Um beispielsweise einen Get-UICulture-Befehl auf den Remotecomputern „Server01“ und „Server02“ auszuführen, geben Sie Folgendes ein:
Invoke-Command -ComputerName Server01, Server02 -ScriptBlock {Get-UICulture}
Die Ausgabe wird an den Computer zurückgegeben.
LCID Name DisplayName PSComputerName
---- ---- ----------- --------------
1033 en-US English (United States) server01.corp.fabrikam.com
1033 en-US English (United States) server02.corp.fabrikam.com
Ausführen eines Skripts
Um ein Skript auf einem oder mehreren Remotecomputern auszuführen, verwenden Sie den FilePath-Parameter des Invoke-Command
Cmdlets. Das Skript muss sich auf dem lokalen Computer befinden oder für diesen verfügbar sein. Die Ergebnisse werden an den lokalen Computer zurückgegeben.
Mit dem folgenden Befehl wird das DiskCollect.ps1
Skript beispielsweise auf den Remotecomputern Server01 und Server02 ausgeführt.
Invoke-Command -ComputerName Server01, Server02 -FilePath c:\Scripts\DiskCollect.ps1
Herstellen einer dauerhaften Verbindung
Verwenden Sie das Cmdlet New-PSSession
, um eine permanente Sitzung auf einem Remotecomputer zu erstellen. Das folgende Beispiel erstellt Remotesitzungen auf „Server01“ und „Server02. Die Sitzungsobjekte werden in der Variablen $s
gespeichert.
$s = New-PSSession -ComputerName Server01, Server02
Nachdem die Sitzungen nun hergestellt sind, können Sie jeden beliebigen Befehl in diesen ausführen. Und da die Sitzungen permanent sind, können Sie Daten von einem Befehl sammeln und in einem anderen Befehl verwenden.
Der folgende Befehl führt beispielsweise einen Get-HotFix
Befehl in den Sitzungen in der $s
Variablen aus und speichert die Ergebnisse in der $h
Variablen. Die Variable $h
wird in jeder der Sitzungen in $s
erstellt, ist jedoch in der lokalen Sitzung nicht vorhanden.
Invoke-Command -Session $s {$h = Get-HotFix}
Nun können Sie die Daten in der Variablen $h
in der gleichen Sitzung mit anderen Befehlen verwenden. Die Ergebnisse werden auf dem lokalen Computer angezeigt. Beispiel:
Invoke-Command -Session $s {$h | where {$_.InstalledBy -ne "NT AUTHORITY\SYSTEM"}}
Erweitertes Remoting
PowerShell enthält Cmdlets, mit denen Sie Folgendes ausführen können:
- Konfigurieren und Erstellen von Remotesitzungen sowohl vom lokalen als auch vom Remoteende aus
- Erstellen angepasster und eingeschränkter Sitzungen
- Importieren von Befehlen aus einer Remotesitzung, die tatsächlich implizit in der Remotesitzung ausgeführt werden
- Konfigurieren der Sicherheit einer Remotesitzung
PowerShell unter Windows enthält einen WSMan-Anbieter. Der Anbieter erstellt ein WSMAN:
-Laufwerk, dass es Ihnen ermöglicht, durch eine Hierarchie von Konfigurationseinstellungen auf dem lokalen Computer und den Remotecomputern zu navigieren.
Weitere Informationen zum WSMan-Anbieter finden Sie unter WS-Management-Anbieter und Informationen zu WS-Management-Cmdlets. Geben Sie alternativ in der Windows PowerShell-Konsole Get-Help wsman
ein.
Weitere Informationen finden Sie in folgenden Quellen:
Hilfe zu Remotingfehlern finden Sie unter about_Remote_Troubleshooting.