Wie man Befehle mit PowerShell-Remoting ausführt
- Was ist PowerShell Remoting
- WinRM-Listener in PowerShell konfigurieren
- Eine neue PowerShell-Sitzung erstellen
- Verwenden Sie Invoke-Methoden, um schnelle Befehle remote in PowerShell auszuführen

Mit Windows PowerShell gibt es mehrere Möglichkeiten, einen Befehl auf lokalen oder entfernten Computern auszuführen. Eine Möglichkeit ist die Aktivierung von PowerShell-Remoting und die Verwendung der PowerShell-Session-Befehle.
Dieser Artikel behandelt, wie PowerShell-Remoting funktioniert, die Konfiguration von WinRM
, ein paar Beispiele für PowerShell-Session-Befehle und wie wir uns mit Administratorzugriff auf einen Computer verbinden können.
Was ist PowerShell Remoting
PowerShell Remoting (oder PSRemoting
) ist eine der häufig verwendeten Funktionen in PowerShell. Infolgedessen können wir nahtlos eine Verbindung zu einem oder mehreren entfernten Computern herstellen und Befehle mit einem einzigen Befehl ausführen.
Kurz gesagt, ermöglicht uns PSRemoting
, Befehle auf entfernten Computern auszuführen, als ob wir direkt davor sitzen würden. Darüber hinaus bietet PSRemoting
Funktionen, die einen Benutzer verbinden und authentifizieren, entfernte Cmdlets ausführen und jeden Output dieses Cmdlets auf dem lokalen Computer anzeigen.
Denken Sie an PSRemoting
wie an SSH
oder telnet
oder sogar psexec
. Es ist einfach eine Möglichkeit, Befehle in PowerShell auf Computern auszuführen.
PSRemoting
basiert stark auf der Ausführung von Befehlen in einer Sitzung. Eine Sitzung ist eine entfernte Shell, die Befehle darin ausführt.
Das Erstellen einer dieser Sitzungen durchläuft viele Schritte im Hintergrund der PowerShell-Konsole.
Wenn wir eine PSRemoting
-Sitzung initiieren, werden die folgenden groben Schritte durchgeführt:
-
Der Benutzer versucht, eine Verbindung zum Zielserver über einen
WinRM
-Listener herzustellen. DerWinRM
-Listener ist ein kleiner Webdienst, der auf einem Server läuft.WinRM
ist die Microsoft-Version eines Implementierungsstandards namensWSMan
.WSMan
ist ein Open-Source-Standard, der zu seiner Zeit mit vielen anderen großen Technologieunternehmen, wie Intel, Dell und Sun Microsystems, erstellt wurde. -
Der Authentifizierungsprozess beginnt, wenn der Client über das HTTP- oder HTTPS-Protokoll mit dem Listener verbindet.
-
Nachdem der Client sich mit dem Server verbunden und authentifiziert hat, generiert
PSRemoting
eine Sitzung. -
Nachdem
PSRemoting
die Sitzung generiert hat, ist sie für das Geschäft geöffnet. Der Client kann beginnen, Informationen an den Server zu senden und alle erforderlichen Ausgaben, die als Serialisierung bekannt sind, zurückzugeben.Diese Kommunikation ist typischerweise verschlüsselt.
Um PSRemoting
zu aktivieren, geben Sie den folgenden Befehl in Ihre PowerShell-Konsole ein.
Enable-PSRemoting –Force
WinRM-Listener in PowerShell konfigurieren
Ein Client benötigt einen Ort, um über das Netzwerk eine Verbindung herzustellen. Der Client muss mit etwas “reden”, das auf der anderen Seite “lauscht”; der “lauscht”-Teil ist die Rolle des WinRM
-Listeners.
Sie können alle WinRM
-Listener, die auf einem Windows-Computer ausgeführt werden, mit dem folgenden winrm
-Befehl entdecken.
winrm e winrm/config/listener
WinRM
-Listener haben einige wesentliche Komponenten.
- Lauschenadresse – Die IP-Adresse, an die sie gebunden sind. Die Lauschenadresse ist die Server-IP-Adresse, mit der sich der Client verbindet.
- Art des Transports – Jeder
WinRM
-Listener benötigt eine Möglichkeit, mit dem Client zu kommunizieren; dies erfolgt über den Transport mit HTTP oder HTTPS. - Optionales Zertifikat-Thumbprint – Wenn ein
WinRM
-Listener HTTPS für den Transport verwendet, muss er wissen, welchen privaten Schlüssel er zur Authentifizierung des Clients verwenden soll; dieser Schlüssel wird mithilfe eines Zertifikat-Thumbprints gefunden.
Um einen entfernten Computer zu einer Liste vertrauenswürdiger Hosts für den lokalen Computer in WinRM
hinzuzufügen, geben Sie den folgenden Befehl ein.
winrm s winrm/config/client '@{TrustedHosts="RemoteComputer"}'
Um die Konfiguration von WinRM
zu überprüfen und zu überprüfen, geben Sie den folgenden Befehl ein.
winrm quickconfig
Eine neue PowerShell-Sitzung erstellen
Der Befehl New-PSSession
erstellt eine Windows PowerShell-Sitzung (PSSession
) auf einem lokalen oder entfernten Computer. Bei der Erstellung einer PSSession
stellt PowerShell eine persistente Verbindung zum entfernten Computer her.
Wir können Befehle auf einem entfernten Computer ausführen, ohne eine PSSession
zu erstellen, indem wir die Parameter –ComputerName
von Enter-PSSession
oder Invoke-Command
verwenden.
Wenn Sie den Parameter –ComputerName
verwenden, erstellt PowerShell eine temporäre Verbindung, die für das Cmdlet verwendet wird und danach geschlossen wird.
Beginnend mit Windows PowerShell 6.0 können wir Secure Shell (SSH) verwenden, um eine Sitzung auf einer entfernten Maschine zu erstellen und herzustellen, wenn SSH auf dem lokalen Computer aktiviert ist und der entfernte Computer mit einem Windows PowerShell SSH-Endpunkt konfiguriert ist.
Einer der Vorteile einer SSH-basierten von Windows PowerShell initiierten Sitzung besteht darin, dass sie plattformübergreifend (Windows, Linux, macOS) oder plattformübergreifend funktionieren kann.
Für SSH-basierte Sitzungen können wir die Parameter -HostName
oder -SSHConnection
verwenden, um den entfernten Computer und andere relevante Verbindungsinformationen anzugeben.
New-PSSession -ComputerName DC01 -Credential (Get-Credential)
Denken Sie daran, dass die durch den Befehl New-PSSession
generierte Sitzung persistent ist. Das bedeutet, dass wir sie mehrfach verwenden können.
Wir müssen jedoch daran denken, dass wir die Sitzung nach der Verwendung des Befehls Remove-PSSession
schließen sollten, um Sicherheitsrisiken zu vermeiden.
Verwenden Sie Invoke-Methoden, um schnelle Befehle remote in PowerShell auszuführen
Das Cmdlet Invoke-Command
ist vorzuziehen, wenn wir die ausgeführten Befehle jetzt schreiben, da wir IntelliSense in unserer IDE beibehalten. Außerdem ist Invoke-Command
vorteilhaft, wenn wir schnelle und einfache, einmalige Befehle ausführen.
Die Sitzung von beliebigen Invoke
-Methoden ist nicht persistent und behält keine Sitzung, die böswillige Benutzer missbrauchen können.
Der folgende Schnipsel ist ein Beispiel für Invoke-Command
, das einen Benutzernamen und ein sicheres String-Passwort übergibt, die die Ausführung von Befehlen auf der Administratorebene ermöglichen.
Script-Beispiel:
$username = "Username"
$password = "Password"
$secstr = New-Object -TypeName System.Security.SecureString
$password.ToCharArray() | ForEach-Object { $secstr.AppendChar($_) }
$cred = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $username, $secstr
Invoke-Command -ComputerName RemoteServer -ScriptBlock { Get-Process } -Credential $cred
Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.
LinkedIn