Bevorstehendes Webinar: Active Directory Management automatisieren – mit PowerShell ein Kinderspiel
ScriptRunner Blog
Erste Schritte mit PowerShell-Remoting
Inhaltsverzeichnis
PowerShell-Remoting existiert bereits seit den frühen Tagen der PowerShell-Scriptsprache. Es ermöglicht die Ausführung von Befehlen und den Empfang von Ausgaben zwischen entfernten Systemen. Traditionell baute PowerShell-Remoting auf WinRM auf, aber mit neueren PowerShell-Versionen steht nun das SSH-Protokoll zur Verfügung, um auch das Remoting zwischen Linux-Systemen zu erleichtern. In diesem Artikel erfahren Sie, wie Sie Ihre ersten Schritte mit PowerShell-Remoting gehen können, wobei der Schwerpunkt auf PowerShell-Versionen 5.1 und höher liegt.
Anforderungen und Einrichtung
Es gibt drei moderne PowerShell-Varianten, die immer noch weit verbreitet sind. Es wird dringend empfohlen, auf PowerShell 7 umzusteigen, da dies eine Langzeitversion (LTS) und die aktuellste ist. Abgesehen davon gibt es natürlich Situationen, in denen dies noch nicht praktikabel ist.
PowerShell 5.1
Dies ist die letzte Version von Windows PowerShell, die mit dem Windows-Betriebssystem gebündelt wurde. Sie wird immer noch von zahlreichen Unternehmen verwendet, und es gibt einige einfache Anforderungen, damit Remoting funktioniert.
- Das Microsoft .NET Framework 4.5.2 oder höher
- .NET 4.6.2 ist auf Windows Server 2016 vorinstalliert
- Windows Remote Management 5.1
- Wird zusammen mit Windows 2016 und höher ausgeliefert
In diesem Artikel konzentrieren wir uns auf Windows Server 2016, da frühere Versionen von Microsoft als End-of-Life eingestuft wurden.
Beachten Sie, dass Windows PowerShell standardmäßig einen microsoft.powershell Session Endpunkt erstellt. Enter-PSSession und New-PSSession verwenden diesen Endpunkt, wenn kein anderer Session Endpunkt angegeben ist. Da neuere Versionen von PowerShell diesen Endpunkt nicht erstellen oder überschreiben, muss der Endpunkt Name angegeben werden, um eine Verbindung mit der richtigen Remoteinstanz herzustellen, wenn keine Verbindung mit Windows PowerShell hergestellt wird.
Ein Beispiel für die Windows PowerShell-Standardkonfiguration finden Sie unten (Abbildung 1).
Der Grund dafür, dass der Parameter -SkipNetworkProfileCheck angegeben wird, ist, dass ein beliebiges Public Netzwerk den Befehl Enable-PSRemoting vorzeitig beendet. Solange Sie sich der Auswirkungen und der ordnungsgemäßen Kontrolle dessen bewusst sind, ist es sicher, diesen Befehl auszuführen.
PowerShell 7
In der neuesten Version von PowerShell ist das Skript Install-PowerShellRemoting.ps1 ebenfalls nicht mehr erforderlich, da Enable-PSRemoting alles, was benötigt wird, durch Ausführen von Enable-PSRemoting registriert, wie unten in Abbildung 4 zu sehen ist.
SSH-Remoting Voraussetzungen
In PowerShell Core und PowerShell 7 ist nun die Option zur Verwendung von SSH als Endpunkt verfügbar. Es gibt einige Anforderungen und Schritte, die erforderlich sind, damit SSH-Remoting funktioniert.
- PowerShell Core 6.x oder PowerShell 7.x
- ssh.exe (Client) und sshd.exe (Server)
- Windows 10 Build 1809 und Windows Server 2019 für integriertes SSH (Client)
Setup der SSH-Endpunkte
Die Einrichtung von PowerShell zur Verwendung von SSH erfordert die folgenden Schritte und Konfigurationen.
- Installieren von OpenSSH Server und Client
- OpenSSH ist für Windows direkt in Windows 10 (1809 oder höher) und Windows Server 2019 als optionales Feature verfügbar (Anweisungen zur Installation unter Windows 10 und auf Windows Server finden Sie im Blog von Thomas Maurer)
- Unter Linux können Sie OpenSSH je nach Plattform installieren
- Konfigurieren Sie das SSH-Subsystem so, dass es einen PowerShell-Prozess auf dem entfernten Rechner hostet
Führen Sie die folgenden Befehle aus, um die erforderlichen Fähigkeiten (OpenSSH Client ist möglicherweise bereits installiert), Dienstkonfigurationen und Firewall-Regeln zu installieren..
# Install the OpenSSH Client and Server Add-WindowsCapability -Online -Name 'OpenSSH.Client~~~~0.0.1.0' Add-WindowsCapability -Online -Name 'OpenSSH.Server~~~~0.0.1.0' # Initial Configuration of SSH Server Start-Service -Name 'sshd' Set-Service -Name 'sshd' -StartupType 'Automatic' # Confirm the Firewall rule is configured. It should be created automatically by setup. Get-NetFirewallRule -Name '*ssh*' | Format-Table -AutoSize # There should be a firewall rule named "OpenSSH-Server-In-TCP", which should be enabled New-NetFirewallRule -Name sshd -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22
Damit der SSH-Server schließlich mit PowerShell-Remoting arbeiten kann, muss das Subsystem korrekt eingestellt sein.
notepad $Env:ProgramData\ssh\sshd_config
Fügen Sie in der Datei sshd_config die folgenden Konfigurationen hinzu, die speziell für PowerShell 7 gelten.
Stellen Sie nach dem Speichern und Konfigurieren sicher, dass Sie den Befehl Restart-Service -Name ’sshd‘ ausführen, um den SSH-Server neu zu starten.
# Make sure that the subsystem line goes after the existing SFTP subsystem line Subsystem powershell c:/progra~1/powershell/7/pwsh.exe -sshs -NoLogo -NoProfile # Change c:/progra~1/powershell/7/pwsh.exe to c:/progra~1/powershell/6/pwsh.exe for PowerShell Core PasswordAuthentication yes # Below is optional but recommended to allow use of public/private keys PubkeyAuthentication yes
Starten Sie schließlich den SSH-Server neu:
Restart-Service -Name 'sshd'
Es gibt einen Fehler in der OpenSSH-Serverversion, die in Windows enthalten ist. Er erfordert, dass 8.3-Abkürzungen für beliebige Dateipfade verwendet werden, daher c:/progra~1. Um zu überprüfen, ob Sie den korrekten 8.3-Abkürzungen verwenden, können Sie den folgenden Befehl verwenden, um diesen für Programmdateien (wo PowerShell 6 oder 7 installiert ist) abzurufen:
Get-CimInstance Win32_Directory -Filter 'Name="C:\\Program Files"' | Select-Object EightDotThreeFileName
Beispielbefehle für PowerShell-Remoting
Was können Sie also mit PowerShell Remoting machen und wie wird es nützlich? Oftmals müssen Systemadministratoren Informationen von einer Vielzahl von Systemen sammeln oder einen Befehl auf vielen Systemen gleichzeitig ausführen, um ein Problem zu beheben oder ein neues Paket bereitzustellen. Mit PowerShell-Remoting lässt sich das einfach bewerkstelligen.
Informationen sammeln
Im folgenden Szenario stellen wir eine Remote-Verbindung zu einem PowerShell 7-Remotendpunkt her und erhalten die laufenden Dienste.
$Params = @{ "ComputerName" = 'Host1' "ConfigurationName" = 'PowerShell.7' "ScriptBlock" = { Get-Service | Where-Object Status -EQ 'Running' | Format-Table -AutoSize } } Invoke-Command @Params
Einen PowerShell-Befehl ausführen
Vielleicht müssen wir einen Dienst neu starten, in diesem Fall den Druckspooler.
$Params = @{ "ComputerName" = 'Host1' "ConfigurationName" = 'PowerShell.7' "ScriptBlock" = { Get-Service -Name 'Spooler' | Restart-Service } } Invoke-Command @Params
Zusammenhängende Posts
5 min read
Steigere deine IT Automations-Effizienz mit neuer ScriptRunner Version
Sep 30, 2024 by Frank Kresse
Wir haben unser neuestes ScriptRunner-Update, Version 7.1, veröffentlicht. Dieses Update ist vollgepackt mit...
9 min read
Scriptember 2024 – einen Monat lang feiern wir PowerShell
Aug 16, 2024 by Heiko Brenn
Willkommen im Scriptember! Wir freuen uns, einen ganz besonderen Monat ankündigen zu können: Wir feiern einen Monat...
9 min read
Fünf Gründe für die Nutzung von PSReadLine
Aug 14, 2024 by Jeffery Hicks
Wie gut bist du mit dem Thema vertraut? Vielleicht gibt dir dieser Artikel nur einen Überblick. Aus meiner Erfahrung in...
Über den Autor:
Adam ist seit über 20 Jahren in der IT-Branche tätig und ein erfahrener Online-Business-Profi. Er ist Unternehmer, IT-Influencer, Microsoft MVP, Blogger, Trainer, Autor und Content-Marketing-Autor für mehrere Technologieunternehmen.
Neueste Beiträge:
- Steigere deine IT Automations-Effizienz mit neuer ScriptRunner Version
- Scriptember 2024 – einen Monat lang feiern wir PowerShell
- Fünf Gründe für die Nutzung von PSReadLine
- Privacy Management mit PowerShell – hier kommen die wichtigsten Funktionen von Priva auf einen Blick
- Happy System Administrator Appreciation Day!