Freigeben über


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 das Remotecomputing mithilfe verschiedener Technologien, unter anderem WMI, RPC und WS-Management.

PowerShell unterstützt WMI, WS-Management und SSH-Remoting. Ab PowerShell 7 wird RPC nur unter Windows unterstützt.

Weitere Informationen zu 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:

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 Cmdlets Enter-PSSession und Exit-PSSession finden Sie hier:

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

Zum Ausführen eines Skripts auf einem oder mehreren Remotecomputern verwenden Sie den Parameter FilePath des Cmdlets Invoke-Command. 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.

Der folgende Befehl führt beispielsweise das Skript DiskCollect.ps1 auf den Remotecomputern „Server01“ und „Server02“ aus.

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.

Beispielsweise führt der folgende Befehl einen Get-HotFix-Befehl in den Sitzungen in der Variablen $s aus und speichert die Ergebnisse dann in der Variablen $h. 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. Zum Beispiel:

Invoke-Command -Session $s {$h | where {$_.InstalledBy -ne "NT AUTHORITY\SYSTEM"}}

Erweitertes Remoting

PowerShell enthält Cmdlets, die Folgendes ermöglichen:

  • Konfigurieren und Erstellen von Remotesitzungen sowohl von lokaler Seite als auch von Remoteseite aus
  • Erstellen angepasster und eingeschränkter Sitzungen
  • Importieren von Befehlen aus einer Remotesitzung, die tatsächlich implizit in der Remotesitzung ausgeführt wird
  • Konfigurieren der Sicherheit einer Remotesitzung

PowerShell unter Windows umfasst 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 unter:

Hilfe zu Remotingfehlern finden Sie unter about_Remote_Troubleshooting.

Weitere Informationen