Wie man Befehle mit PowerShell-Remoting ausführt

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

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:

  1. Der Benutzer versucht, eine Verbindung zum Zielserver über einen WinRM-Listener herzustellen. Der WinRM-Listener ist ein kleiner Webdienst, der auf einem Server läuft.

    WinRM ist die Microsoft-Version eines Implementierungsstandards namens WSMan. WSMan ist ein Open-Source-Standard, der zu seiner Zeit mit vielen anderen großen Technologieunternehmen, wie Intel, Dell und Sun Microsystems, erstellt wurde.

  2. Der Authentifizierungsprozess beginnt, wenn der Client über das HTTP- oder HTTPS-Protokoll mit dem Listener verbindet.

  3. Nachdem der Client sich mit dem Server verbunden und authentifiziert hat, generiert PSRemoting eine Sitzung.

  4. 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.

  1. Lauschenadresse – Die IP-Adresse, an die sie gebunden sind. Die Lauschenadresse ist die Server-IP-Adresse, mit der sich der Client verbindet.
  2. 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.
  3. 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
Genießen Sie unsere Tutorials? Abonnieren Sie DelftStack auf YouTube, um uns bei der Erstellung weiterer hochwertiger Videoanleitungen zu unterstützen. Abonnieren
Marion Paul Kenneth Mendoza avatar Marion Paul Kenneth Mendoza avatar

Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.

LinkedIn