PowerShell Direct: Remote-Session zu VMs über den Host aufbauen

    PowerShell DirectPowerShell Direct ist ein neues Feature von Windows 10 und Server 2016. Es kann eine Ver­bindung direkt mit einer virtu­ellen Maschine her­stellen, ohne dass man das Gast­betriebs­system oder das Netz­werk dafür konfi­gurieren muss.

    Grundsätzlich macht es PowerShell dem Benutzer relativ einfach, Kommandos auf einem Remote-PC abzusetzen oder dort eine interaktive Sitzung zu öffnen (siehe: Enter-PSSession, Invoke-Command: PowerShell remote ausführen).

    Kommunikation über den VMBus

    Die unkomplizierte Remote-Administration verlangt allerdings, dass entsprechende Voraussetzungen dafür gegeben sind. Dazu zählt die Konfiguration von WinRM inklusive der Firewall-Regeln, die sich bei Mitgliedern einer Domäne einfach bewerkstelligen lässt, sonst aber mühevoll sein kann. Eine weitere Bedingung besteht natürlich darin, dass man den Remote-Computer über das Netzwerk erreicht.

    PowerShell Direct hingegen ist darauf nicht angewiesen. Wie VMConnect, das eine RDP-Verbindung mit einer VM herstellt, kommuniziert PowerShell Direct über den VMBus von Hyper-V mit einer VM. Aufgrund dieser Architektur klappt die Kommunikation sogar dann, wenn das Netzwerk der VM als private oder gar fehlerhaft konfiguriert wurde.

    Daher eignet sich PowerShell Direct nicht nur für das Troubleshooting von VMs, sondern etwa auch, um einen Nano Server einer AD-Domäne anzuschließen, wenn dieser in einer virtuellen Maschine läuft. Ein weiterer interessanter Anwendungsfall wäre, dass man kurzfristig Dateien in eine VM kopieren muss, indem man dafür Copy-Item mit dem neuen Parameter ToSession nutzt.

    Beschränkungen von PowerShell Direct

    Gleichzeitig gelten aber für PowerShell Direct einige Einschränkungen:

    • Die Verbindung lässt sich nur vom Host aus aufbauen. Selbst in einem Cluster muss man PowerShell auf dem Knoten ausführen, auf dem die VM läuft.
    • Verbindungen von VM zu VM oder von VM zu Host sind nicht vorgesehen.
    • Auf dem Host und in der VM werden nur Windows 10 und Server 2016 unterstützt.
    • PowerShell muss mit administrativen Rechten aufgerufen werden

    Enter-PSSession und Invoke-Command verwenden

    Sind diese Voraussetzungen gegeben, dann funktioniert die eigentliche Nutzung von PowerShell Direct ganz ähnlich wie bei einer herkömmlichen Remote-Session. Enter-PSSession dient wie gehabt dazu, um eine interaktive Sitzung zu öffnen, während man mit Invoke-Command einzelne Kommandos oder Scripts auf dem entfernten Rechner ausführt.

    Starten einer Remote-Session mit Enter-PSSession via PowerShell Direct.

    Der wesentliche Unterschied besteht darin, dass man nicht den Parameter ComputerName verwendet, um das Betriebs­system auf einem physikalischen Rechner oder in einer VM anzusprechen. Vielmehr adressiert man die virtuelle Maschine direkt, entweder über ihren Namen (Parameter VMName) oder ihre GUID (Parameter VMid).

    Beide Informationen kann man recht einfach über das Cmdlet Get-VM erhalten:

    Get-VM | select Name, ID, State

    Die zusätzliche Abfrage des Status stellt sicher, dass man sich nur mit VMs verbindet, die tatsächlich eingeschaltet sind. Wenn der Name der virtuellen Maschine beispielsweise auf WS2018-VM1 lautet, dann würde man eine interaktive Session folgendermaßen starten:

    Enter-PSSession -VMName "WS2018-VM1"

    Nach dem Aufbau der Verbindung verlangt PowerShell die Eingabe der Anmelde­informationen für das Gastbetriebs­system, bevor man wie gewohnt auf der Kommandozeile des Remote-Rechners landet.

    Schließlich sei noch darauf hingewiesen, dass sich PowerShell Direct nicht auf das Management von VMs beschränkt, sondern auch Container unterstützt. In diesem Fall übergibt man Enter-PSSession bzw. Invoke-Command die Parameter ContainerName oder ContainerID (siehe dazu: Windows Server 2016 Container erstellen).

    Keine Kommentare