Remoteverwaltung eines Servers mit Windows PowerShell
Die Mitarbeitenden der IT-Verwaltung bei Contoso konzentrieren sich zunehmend darauf, administrative Aufgaben über eine Remoteverbindung zu dem verwalteten Objekt durchzuführen. Ein Bereich von besonderem Interesse ist die Möglichkeit, Windows PowerShell für die Remoteverwaltung der IT-Infrastruktur von Contoso zu nutzen. Um dies zu erreichen, können Sie Windows PowerShell-Remoting verwenden.
Anforderungen für Remoting
Für Remoting muss Windows PowerShell auf dem lokalen Computer vorhanden und Windows-Remoteverwaltung auf allen Remotecomputern aktiviert sein, mit denen eine Verbindung hergestellt werden soll. Außerdem müssen Sie Windows PowerShell-Remoting aktivieren.
Hinweis
Windows PowerShell-Remoting ist in Windows Server standardmäßig aktiviert, muss unter Windows 10 und Windows 11 jedoch aktiviert werden.
Verwenden Sie zum Aktivieren von Windows PowerShell-Remoting eines der folgenden Verfahren. Führen Sie an einer Eingabeaufforderung mit erhöhten Rechten oder der Windows PowerShell-Eingabeaufforderung (Administrator) den folgenden Befehl aus:
Winrm quickconfig
Alternativ können Sie zum Aktivieren von Remoting das folgende Windows PowerShell-Cmdlet verwenden:
Enable-PSremoting -force
Wichtig
Windows-Remoteverwaltung kommuniziert über HTTP. Standardmäßig verwenden Windows-Remoteverwaltung und Windows PowerShell-Remoting den TCP-Port 5985 für eingehende unverschlüsselte Verbindungen und den TCP-Port 5986 für eingehende verschlüsselte Verbindungen.
Hinweis
Anwendungen, die die Windows-Remoteverwaltung verwenden (z. B. Windows PowerShell) können auch ihre eigene Verschlüsselung auf die Daten anwenden, die an den Windows-Remoteverwaltungsdienst übergeben werden.
Alle zum Ausführen eines bestimmten Befehls erforderlichen Dateien und anderen Ressourcen müssen sich auf dem Remotecomputer befinden, da die Remotingbefehle keine Ressourcen kopieren. Sie können jedoch lokale Skripts ausführen. Dies liegt daran, dass der Inhalt des Skripts an den Remotecomputer gesendet wird, nicht an die Skriptdatei selbst.
Um die Remoteverwaltung durchführen zu können, müssen Administratoren über folgende Berechtigungen verfügen:
- Verbinden mit dem Remotecomputer
- Ausführen von Windows PowerShell
- Zugreifen auf Datenspeicher und die Registrierung auf dem Remotecomputer
Achtung
Das Aktivieren von Remoting auf Computern mit einer Netzwerkschnittstellenkarte (NIC), die dem Netzwerkadressenprofil „Öffentlich“ zugeordnet ist, erzeugt einen Fehler. Sie können Enable-PSremoting -force
verwenden, um diese Einschränkung zu umgehen und das Remoting auf einem Gerät mit einer öffentlichen NIC zu erzwingen.
Ausführen von Cmdlets für Remotecomputer
Mehrere Cmdlets verfügen über einen ComputerName-Parameter, mit dem Sie Objekte von Remotecomputern abrufen können. Diese Cmdlets verwenden kein Windows PowerShell-Remoting für die Kommunikation, daher können Sie den Parameter „ComputerName“ in diesen Cmdlets auf jedem Computer verwenden, auf dem Windows PowerShell ausgeführt wird. Sie brauchen die Computer nicht für Windows PowerShell-Remoting zu konfigurieren und müssen die Systemanforderungen für Remoting nicht erfüllen.
Die folgende Tabelle enthält weitere Informationen über den Parameter „ComputerName“.
Befehl | Beschreibung |
---|---|
Get-Command –ParameterName ComputerName |
Findet Cmdlets, die den ComputerName-Parameter verwenden. |
Get-Help <cmdlet-name> -parameter ComputerName |
Bestimmen Sie, ob der ComputerName-Parameter Windows PowerShell-Remoting erfordert. |
Verarbeiten von Remotebefehlen
Wenn Sie eine Verbindung mit einem Remotecomputer herstellen und ihm einen Remotebefehl senden, wird der Befehl über das Netzwerk an eine Windows PowerShell-Instanz auf dem Remotecomputer übertragen und anschließend ausgeführt. Die Ergebnisse des Befehls werden an den lokalen Computer zurückgesendet und in der Windows PowerShell-Sitzung auf dem lokalen Computer angezeigt.
Alle lokalen Eingaben für einen Remotebefehl werden gesammelt, bevor sie an den Remotecomputer gesendet werden. Die Ausgabe wird jedoch unmittelbar nach ihrer Generierung an den lokalen Computer zurückgegeben. Wenn Sie eine Verbindung mit einem Remotecomputer herstellen, verwendet das System die Anmeldeinformationen für Benutzername und Kennwort auf dem lokalen Computer für die Authentifizierung beim Remotecomputer.
Hinweis
Standardmäßig wird das Authentifizierungsprotokoll Kerberos Version 5 (V5) verwendet, um die Autorisierung und Authentifizierung auszuführen. Daher ist eine AD DS Domäne erforderlich.
Tipp
In Situationen, in denen sich Remotecomputer in keiner Domäne oder in einer nicht vertrauenswürdigen Domäne befinden, können Sie einem Clientcomputer gestatten, eine Verbindung herzustellen, indem Sie die Remotecomputer als vertrauenswürdige Hosts definieren.
Die folgenden Cmdlets unterstützen Remoting.
Invoke-Command
Enter-PSSession
Exit-PSSession
Disconnect-PSSession
Receive-PSSession
Connect-PSSession
Tipp
Mithilfe der Windows PowerShell-ISE können Sie Remoteregisterkarten erstellen. Verwenden Sie zum Ausführen dieser Aufgabe die Registerkartenoption Neue Remote-PowerShell aus dem Menü Datei in der Windows PowerShell-ISE.
Wenn Sie Remoting implementieren, können Sie eine Verbindung zu den Remotecomputern über eine temporäre Sitzung herstellen oder eine permanente Sitzung erstellen.
Erstellen einer temporären Sitzung
Bei einer temporären Sitzung starten Sie die Sitzung, führen die Befehle aus und beenden die Sitzung wieder. Dies ist eine effiziente Methode zum Ausführen eines einzelnen Befehls oder mehrerer nicht zusammenhängender Befehle, auch bei einer großen Anzahl von Remotecomputern.
Hinweis
In Befehlen definierte Variablen oder Funktionen sind nicht mehr verfügbar, nachdem Sie die Verbindung geschlossen haben.
Um eine temporäre Verbindung zu erstellen, geben Sie die Remotecomputer unter Verwendung des Cmdlets Invoke-Command
mit dem Parameter -ComputerName an. Verwenden Sie dann den Parameter -ScriptBlock, um den Befehl anzugeben. Mit dem folgende Befehl wird z. B. Get-EventLog
auf dem Computer „SEA-DC1“ ausgeführt:
Invoke-Command –ComputerName SEA-DC1 –ScriptBlock {Get-EventLog –log system}
Erstellen einer permanenten Sitzung
Um eine permanente Verbindung mit einem anderen Computer zu erstellen, verwenden Sie das Cmdlet New-PSSession
. Der folgende Befehl erstellt z. B. eine Sitzung auf einem Remotecomputer und speichert die Sitzung in der Variablen „$“:
$s = New-PSSession –ComputerName SEA-DC1
Verwenden Sie das Cmdlet Enter-PSSession
, um eine Verbindung zu einer interaktiven Sitzung herzustellen und diese zu starten. Nachdem Sie z. B. eine neue Sitzung auf SEA-DC1 geöffnet haben, startet der folgende Befehl eine interaktive Sitzung mit dem Computer:
Enter-PSSession $s
Sobald Sie eine Sitzung starten, ändert sich die Windows PowerShell-Eingabeaufforderung auf Ihrem lokalen Computer, um die Verbindung anzuzeigen.
Die interaktive Sitzung bleibt geöffnet, bis Sie sie schließen. So können Sie beliebig viele Befehle ausführen. Um die interaktive Sitzung zu beenden, geben Sie den folgenden Befehl ein:
Exit-PSSession
Ausführen von Remotebefehlen auf mehreren Computern
Bei temporären Sitzungen akzeptiert das Cmdlet Invoke-Command
mehrere Computernamen. Für permanente Verbindungen akzeptiert der Parameter Session mehrere Windows PowerShell-Sitzungen. Wenn Sie einen Remotebefehl auf mehreren Computern ausführen möchten, fügen Sie alle Computernamen im Parameter ComputerName im Cmdlet Invoke-Command
ein, und trennen Sie die Namen durch Kommas, wie im folgenden Beispiel gezeigt:
Invoke-Command -ComputerName SEA-DC1, SEA-SVR1, SEA-SVR2 -ScriptBlock {Get-Culture}
Für permanente Sitzungen können Sie auch einen Befehl in mehreren Windows PowerShell-Sitzungen ausführen. Die folgenden Befehle erstellen Windows PowerShell-Sitzungen auf SEA-DC1, SEA-SVR1 und SEA-SVR2 und führen dann einen Get-Culture
-Befehl in jeder Windows PowerShell-Sitzung aus:
$s = New-PSSession -ComputerName SEA-DC1, SEA-SVR1, SEA-SVR2
Invoke-Command -Session $s -ScriptBlock {Get-Culture}
Tipp
Um den lokalen Computer zur Liste der Computer hinzuzufügen, geben Sie den Namen des lokalen Computers, einen Punkt (.) oder localhost ein.
Ausführen eines Skripts auf Remotecomputern
Um ein lokales Skript auf Remotecomputern auszuführen, verwenden Sie den Parameter FilePath mit Invoke-Command
. Der folgende Befehl führt das Skript „Sample.ps1“ auf den Computern „SEA-DC1“ und „SEA-SVR1“ aus:
Invoke-Command -ComputerName SEA-DC1, SEA-SVR1 –FilePath C:\Test\Sample.ps1
Die Ergebnisse des Skripts werden an den lokalen Computer zurückgegeben. Wenn Sie den Parameter FilePath verwenden, brauchen Sie keine Dateien auf die Remotecomputer zu kopieren.
Demo
Im folgenden Video wird veranschaulicht, wie eine Remoteinstanz von Windows Server mit Windows PowerShell verwaltet wird. Der Vorgang besteht aus den folgenden Hauptschritten:
Starten Sie eine PowerShell-Eingabeaufforderung mit erhöhten Rechten.
Erstellen Sie eine PowerShell-Remotingsitzung, indem Sie den folgenden Befehl ausführen:
Enter-PSSession -ComputerName SEA-DC1
Rufen Sie mit standardmäßigen Windows PowerShell-Cmdlets Informationen über den Server ab, z. B. Name und IP-Adresse.
Überprüfen Sie den Status des IIS-Diensts, und starten Sie den Dienst mit dem folgenden Befehl neu:
Get-Service -Name IISAdmin | Restart-Service