Ausführen von PowerShell-Cmdlets auf Remoteservern

PowerShell ist eine leistungsstarke Befehlszeilenumgebung, mit der Windows verwaltet und gewartet werden kann. PowerShell ist zwar leicht als lokales Verwaltungstool zu verstehen, kann jedoch auch zur Verwaltung von Remoteservern verwendet werden. In der Tat können Administratoren PowerShell-Skripts erstellen, die Verwaltungsaufgaben für eine große Anzahl von Servern ausführen. Die Befehle Invoke-Command und New-PSSession sind zwei Möglichkeiten zur Ausführung PowerShell-Cmdlets auf entfernten Systemen.

Invoke-Befehl

Wenn Sie nur ein einzelnes Cmdlet (oder eine Reihe von Pipe-Cmdlets) auf einem oder mehreren Remote-Servern ausführen müssen, ist es am einfachsten, das zu verwenden Invoke-Befehl Cmdlet. Microsoft Dokumentation In diesem Cmdlet wird eine überwältigende Anzahl von Parametern und Syntaxvarianten aufgelistet, was dazu führt, dass das Cmdlet Invoke-Command den Ruf hat, übermäßig komplex zu sein. Trotzdem ist die Verwendung von Invoke-Command zum Ausführen eines Cmdlets auf einem Remote-System überraschend einfach.
Für die grundlegende Ausführung von Remote-Cmdlets müssen Sie nur den Namen des Remote-Computers und den Codeblock angeben, den Sie ausführen möchten. Angenommen, Sie wollten das ausführen Cmdlet Get-VM auf einem Remote-Server namens Production1. Sie können dies mit diesem Befehl tun:
Invoke-Command –ComputerName Production1 {Get-VM}
Dies scheint zwar einfach zu sein, es gibt jedoch einige Dinge, die Sie über diese Methode wissen müssen.
Erstens beschränkt Sie das Cmdlet Invoke-Command nicht darauf, ein Cmdlet auf einem einzelnen Remote-System auszuführen. Sie können ein Cmdlet auf mehreren Computern ausführen. Sie müssen lediglich die Computernamen durch ein Komma trennen. Um diesen Befehl beispielsweise für Production1, Production2 und Production3 auszuführen, sieht der Befehl folgendermaßen aus:
Invoke-Command – Computername Production1, Production2, Production3 {Get-VM}
Das zweite, was Sie über diese Methode wissen müssen, ist, dass Sie, obwohl es so konzipiert ist, dass es einfach ist, einen einzelnen Befehl auf einem Remote-System auszuführen, mehrere Befehle ausführen können. Wenn Sie sich die vorherige Codezeile ansehen, werden Sie feststellen, dass Get-VM, der Befehl, der für die Remote-Systeme ausgeführt wird, in geschweiften Klammern steht. Alles in diesen Klammern wird auf den angegebenen Remotecomputern ausgeführt. Daher können Sie Cmdlets mithilfe des Pipe-Symbols miteinander verknüpfen, sofern alle Befehle in geschweiften Klammern stehen.
Das dritte, was Sie wissen müssen, ist, dass die oben gezeigte Syntax nur funktioniert, wenn die Kerberos-Authentifizierung verwendet wird und alle Computer, einschließlich des Computers, auf dem der Befehl eingegeben wird, domänenverbunden sind. Andernfalls müssen Sie den HTTPS-Transport verwenden und die Remote-Systeme als vertrauenswürdige Hosts festlegen.

New-PSSession

Die New-PSSession wird häufig zum Ausführen von Befehlen auf Remote-Systemen verwendet. Während Invoke-Command so konzipiert ist, dass ein einzelner Befehl (oder eine Reihe von Befehlen) auf einem Remote-System ausgeführt wird, leitet New-PSSession PowerShell tatsächlich auf den Remote-Server um. Im Wesentlichen wird jeder von Ihnen eingegebene Befehl automatisch an den Remotecomputer gesendet und auf diesem ausgeführt.
Wie beim Cmdlet Invoke-Command gibt es verschiedene Variationen des Cmdlets New-PSSession. Sie finden die Microsoft-Dokumentation zu diesem Cmdlet Hier.
Im einfachsten Fall erfordert dieses Cmdlet nur, dass Sie den Namen des Remotecomputers angeben. Wenn Sie beispielsweise eine Sitzung mit einem Computer namens Production1 einrichten möchten, können Sie den folgenden Befehl verwenden:
New-PSSession –ComputerName Production1
Dieser Befehl richtet eine Sitzung mit dem angegebenen Computer ein, leitet PowerShell jedoch nicht automatisch um, sodass alle von Ihnen eingegebenen Befehle auf dem Remote-System ausgeführt werden. Der Grund dafür ist, dass Microsoft Sie nicht auf die Verwendung nur einer Remotesitzung beschränkt. Möglicherweise müssen Sie Remotesitzungen mit verschiedenen Servern einrichten. Wenn Sie den oben aufgeführten Befehl eingeben, wird eine Sitzung eingerichtet, und PowerShell bestätigt die Sitzung und listet eine Sitzungs-ID-Nummer auf.
Wenn Sie die Remotesitzung verwenden möchten, müssen Sie ein anderes PowerShell-Cmdlet mit dem Namen Enter-PSSession verwenden. Fügen Sie einfach die Sitzungsnummer hinzu, zu der Sie eine Verbindung herstellen möchten. Wenn das Cmdlet New-PSSession beispielsweise 1 als Sitzungs-ID für die Verbindung zu Production1 auflistet, können Sie diese Sitzung mit dem folgenden Befehl eingeben:
Enter-PSSession 1
Wenn Sie diesen Befehl verwenden, wird die PowerShell-Eingabeaufforderung geändert, um den Namen des Remote-Systems wiederzugeben. Auf diese Weise können Sie leicht verfolgen, an welches System Sie Befehle senden.
Sie müssen erneut sicherstellen, dass die Kerberos-Authentifizierung verwendet wird und beide Systeme einer Domäne beitreten. Andernfalls müssen Sie durch einige zusätzliche Rahmen springen, um eine Remote-Sitzung einzurichten.
Wie Sie sehen können, erleichtert PowerShell das Ausführen von Befehlen für Remoteserver. Dies gilt insbesondere dann, wenn alle Server und Ihre Workstation zu einer gemeinsamen Domäne gehören.

Leave a Reply