Freigeben über


Automatisierung und Verwaltung virtueller Computer mit PowerShell

Sie können PowerShell Direct verwenden, um beliebige PowerShell in einem Windows 10 oder höher oder Windows Server 2016 oder neueren virtuellen Computer von Ihrem Hyper-V-Host aus auszuführen. Verwenden Sie PowerShell Direct unabhängig von den Netzwerkkonfigurations- oder Remoteverwaltungseinstellungen.

Hier sind einige Möglichkeiten zum Ausführen von PowerShell Direct:

Anforderungen

Betriebssystemanforderungen:

  • Host: Windows 10, Windows Server 2016 oder höher mit Hyper-V.
  • Gast-/virtueller Computer: Windows 10, Windows Server 2016 oder höher.

Wenn Sie ältere virtuelle Computer verwalten, verwenden Sie virtual Machine Connection (VMConnect) oder verbinden sie über eine Netzwerkverbindung.

Konfigurationsanforderungen:

  • Der virtuelle Computer muss lokal auf dem Host ausgeführt werden.
  • Der virtuelle Computer muss aktiviert und mit mindestens einem konfigurierten Benutzerprofil ausgeführt werden.
  • Sie müssen als Hyper-V Administrator beim Hostcomputer angemeldet sein.
  • Sie müssen gültige Benutzeranmeldeinformationen für den virtuellen Computer angeben.

Erstellen und Beenden einer interaktiven PowerShell-Sitzung

Die einfachste Möglichkeit zum Ausführen von PowerShell-Befehlen auf einem virtuellen Computer besteht darin, eine interaktive Sitzung zu starten.

Wenn die Sitzung gestartet wird, werden die von Ihnen eingegebenen Befehle auf dem virtuellen Computer genauso ausgeführt, als ob Sie sie direkt in eine PowerShell-Sitzung auf dem virtuellen Computer selbst eingegeben haben.

So starten Sie eine interaktive Sitzung:

  1. Öffnen Sie auf dem host Hyper-V PowerShell als Administrator.

  2. Führen Sie einen der folgenden Befehle aus, um eine interaktive Sitzung mit dem Namen oder der GUID des virtuellen Computers zu erstellen:

    Enter-PSSession -VMName <VMName>
    Enter-PSSession -VMId <VMId>
    

    Geben Sie Anmeldeinformationen für den virtuellen Computer ein, wenn Sie dazu aufgefordert werden.

  3. Führen Sie Befehle auf Ihrem virtuellen Computer aus. Der VMName sollte als Präfix für Ihre PowerShell-Eingabeaufforderung wie folgt angezeigt werden:

    [VMName]: PS C:\>
    

    Jeder Befehl, den Sie ausführen, wird auf Dem virtuellen Computer ausgeführt. Führen Sie ipconfig oder hostname aus, um sicherzustellen, dass diese Befehle auf dem virtuellen Computer ausgeführt werden.

  4. Wenn Sie fertig sind, führen Sie den folgenden Befehl aus, um die Sitzung zu schließen:

     Exit-PSSession 
    

Hinweis

Wenn Ihre Sitzung keine Verbindung herstellt, sehen Sie sich die Problembehandlung für potenzielle Ursachen an.

Weitere Informationen zu diesen Cmdlets finden Sie unter Enter-PSSession und Exit-PSSession.

Ausführen eines Skripts oder Befehls mit Invoke-Command

PowerShell Direct mit Invoke-Command eignet sich perfekt für Situationen, in denen Sie einen Befehl oder ein Skript auf einem virtuellen Computer ausführen müssen, aber nicht weiter mit dem virtuellen Computer interagieren müssen.

So führen Sie einen einzelnen Befehl aus:

  1. Öffnen Sie auf dem host Hyper-V PowerShell als Administrator.

  2. Führen Sie einen der folgenden Befehle aus, um eine Sitzung mit dem Namen oder der GUID des virtuellen Computers zu erstellen:

    Invoke-Command -VMName <VMName> -ScriptBlock { command } 
    Invoke-Command -VMId <VMId> -ScriptBlock { command }
    

    Geben Sie Anmeldeinformationen für den virtuellen Computer ein, wenn Sie dazu aufgefordert werden.

    Der Befehl wird auf dem virtuellen Computer ausgeführt. Wenn der Befehl die Ausgabe erzeugt, wird er in der Konsole angezeigt. Die Verbindung wird automatisch geschlossen, sobald der Befehl ausgeführt wird.

So führen Sie ein Skript aus:

  1. Öffnen Sie auf dem host Hyper-V PowerShell als Administrator.

  2. Führen Sie einen der folgenden Befehle aus, um eine Sitzung mit dem Namen oder der GUID des virtuellen Computers zu erstellen:

    Invoke-Command -VMName <VMName> -FilePath C:\host\script_path\script.ps1 
    Invoke-Command -VMId <VMId> -FilePath C:\host\script_path\script.ps1 
    

    Geben Sie Anmeldeinformationen für den virtuellen Computer ein, wenn Sie dazu aufgefordert werden.

    Das Skript wird auf dem virtuellen Computer ausgeführt. Die Verbindung wird automatisch geschlossen, sobald der Befehl ausgeführt wird.

Weitere Informationen zu diesem Cmdlet finden Sie unter Invoke-Command.

Kopieren von Dateien mit New-PSSession und Copy-Item

Hinweis

PowerShell Direct unterstützt nur persistente Sitzungen in Windows-Builds 14280 und höher.

Persistente PowerShell-Sitzungen sind unglaublich nützlich beim Schreiben von Skripts, die Aktionen auf einem oder mehreren Remotecomputern koordinieren. Nach der Erstellung sind persistente Sitzungen im Hintergrund vorhanden, bis Sie sich entschließen, sie zu löschen. Dies bedeutet, dass Sie immer wieder mit Invoke-Command oder Enter-PSSession ohne Übergabe von Anmeldeinformationen auf dieselbe Sitzung verweisen können.

Nach demselben Token halten Sitzungen den Zustand. Da persistente Sitzungen beibehalten werden, werden alle Variablen, die Sie in einer Sitzung erstellen oder an eine Sitzung übergeben, über mehrere Aufrufe hinweg beibehalten. Sie können eine Reihe von Tools verwenden, um mit persistenten Sitzungen zu arbeiten. Verwenden Sie in diesem Beispiel "New-PSSession" und " Copy-Item" , um Daten vom Host auf einen virtuellen Computer und von einem virtuellen Computer auf den Host zu verschieben.

So erstellen Sie eine Sitzung, und kopieren Sie dann Dateien:

  1. Öffnen Sie auf dem host Hyper-V PowerShell als Administrator.

  2. Verwenden Sie einen der folgenden Befehle, um eine persistente PowerShell-Sitzung mit dem virtuellen Computer mithilfe von New-PSSession zu erstellen.

    $s = New-PSSession -VMName <VMName> -Credential (Get-Credential)
    $s = New-PSSession -VMId <VMId> -Credential (Get-Credential)
    

    Geben Sie Anmeldeinformationen für den virtuellen Computer ein, wenn Sie dazu aufgefordert werden.

    Warnung

    Es gibt einen Fehler in Builds vor 14500. Wenn Sie nicht explizit Anmeldeinformationen mit der -Credential Kennzeichnung angeben, stürzt der Dienst im Gast ab und muss neu gestartet werden. Wenn dieses Problem auftritt, lesen Sie den Abschnitt Fehler: Eine Remotesitzung wurde möglicherweise beendet für Anweisungen zur Problemumgehung.

  3. Kopieren Sie eine Datei in den virtuellen Computer.

    Um vom Hostcomputer auf den virtuellen Computer zu kopieren C:\host_path\data.txt , führen Sie Folgendes aus:

    Copy-Item -ToSession $s -Path C:\host_path\data.txt -Destination C:\guest_path\
    
  4. Kopieren Sie eine Datei vom virtuellen Computer (auf dem Host).

    Führen Sie Folgendes aus, um vom virtuellen Computer auf den Host zu kopieren C:\guest_path\data.txt :

    Copy-Item -FromSession $s -Path C:\guest_path\data.txt -Destination C:\host_path\
    
  5. Beenden Sie die persistente Sitzung mithilfe von Remove-PSSession.

    Remove-PSSession $s
    

Problembehandlung

PowerShell Direct zeigt eine kleine Gruppe häufiger Fehlermeldungen an. In den folgenden Abschnitten werden die häufigsten Fehlermeldungen, einige Ursachen und Tools zur Diagnose von Problemen beschrieben.

-VMName oder -VMID Parameter sind nicht vorhanden

Problem:

Enter-PSSession, Invoke-Command oder New-PSSession haben keinen -VMName oder -VMId Parameter.

Mögliche Ursachen:

Das wahrscheinlichste Problem besteht darin, dass Ihr Hostbetriebssystem PowerShell Direct nicht unterstützt.

Sie können Ihren Windows-Build überprüfen, indem Sie den folgenden Befehl ausführen:

[System.Environment]::OSVersion.Version

Wenn Sie einen unterstützten Build ausführen, ist es auch möglich, dass Ihre Version von PowerShell PowerShell Direct nicht unterstützt. Für PowerShell Direct und JEA muss die Hauptversion 5 oder höher sein.

Sie können den PowerShell-Versionsbuild überprüfen, indem Sie den folgenden Befehl ausführen:

$PSVersionTable.PSVersion

Fehler: Möglicherweise wurde eine Remotesitzung beendet.

Hinweis

Für Enter-PSSession zwischen den Host-Builds 10240 und 12400 werden alle Fehler als "Möglicherweise wurde eine Remotesitzung beendet" gemeldet.

Fehlermeldung:

Enter-PSSession: Ein Fehler ist aufgetreten, dass Windows PowerShell nicht verarbeiten kann. Möglicherweise wurde eine Remotesitzung beendet.

Mögliche Ursachen:

  • Der virtuelle Computer ist vorhanden, wird jedoch nicht ausgeführt.
  • Das Gastbetriebssystem unterstützt PowerShell Direct nicht. Siehe Anforderungen.
  • PowerShell ist noch nicht im Gast verfügbar
    • Das Betriebssystem hat das Starten nicht abgeschlossen.
    • Das Betriebssystem kann nicht ordnungsgemäß gestartet werden.
    • Für ein Startzeitereignis sind Benutzereingaben erforderlich.

Verwenden Sie das Cmdlet "Get-VM ", um zu überprüfen, welche VMs auf dem Host ausgeführt werden.

Fehlermeldung:

New-PSSession: Ein Fehler ist aufgetreten, dass Windows PowerShell nicht verarbeiten kann. Möglicherweise wurde eine Remotesitzung beendet.

Mögliche Ursachen:

  • Einer der oben aufgeführten Gründe – sie alle gelten für New-PSSession
  • Ein Fehler in aktuellen Builds, bei dem Sie Anmeldeinformationen explizit übergeben -Credentialmüssen. Wenn dieser Fehler auftritt, hängt der gesamte Dienst im Gastbetriebssystem und muss neu gestartet werden. Sie können überprüfen, ob die Sitzung weiterhin mit Enter-PSSession verfügbar ist.

Um das Problem mit den Anmeldeinformationen zu umgehen, melden Sie sich mit VMConnect beim virtuellen Computer an, öffnen Sie PowerShell, und starten Sie den vmicvmsession-Dienst mit dem folgenden PowerShell-Befehl neu:

Restart-Service -Name vmicvmsession

Fehler: Parametersatz kann nicht behoben werden

Fehlermeldung:

Enter-PSSession: Der Parametersatz kann mit den angegebenen benannten Parametern nicht aufgelöst werden.

Mögliche Ursachen:

  • Sie können beim Herstellen einer Verbindung mit virtuellen Computern nicht verwenden -RunAsAdministrator .

    Beim Herstellen einer Verbindung mit einem Windows-Container ermöglicht das -RunAsAdministrator Flag Administratorverbindungen ohne explizite Anmeldeinformationen. Da virtuelle Computer dem Host keinen impliziten Administratorzugriff gewähren, müssen Sie explizit Anmeldeinformationen eingeben.

Sie können Administratoranmeldeinformationen an den virtuellen Computer mit dem -Credential Parameter übergeben oder manuell eingeben, wenn Sie dazu aufgefordert werden.

Fehler: Die Anmeldeinformationen sind ungültig.

Fehlermeldung:

Enter-PSSession: Die Anmeldeinformationen sind ungültig.

Mögliche Ursachen:

  • Die Gastanmeldeinformationen konnten nicht überprüft werden.
    • Die angegebenen Anmeldeinformationen waren falsch.
    • Es gibt keine Benutzerkonten im Gast (das Betriebssystem wurde noch nicht gestartet)
    • Wenn Sie eine Verbindung als Administrator herstellen: Der Administrator ist nicht als aktiver Benutzer festgelegt. Weitere Informationen finden Sie unter Aktivieren und Deaktivieren des integrierten Administratorkontos.

Fehler: Der Parameter "VMName" wird keinem virtuellen Computer zugeordnet.

Fehlermeldung:

Enter-PSSession: Der Eingabeparameter "VMName" kann keinem virtuellen Computer zugeordnet werden.

Mögliche Ursachen:

  • Sie sind kein Hyper-V Administrator.
  • Der virtuelle Computer ist nicht vorhanden.

Verwenden Sie das Cmdlet "Get-VM ", um zu überprüfen, ob die von Ihnen verwendeten Anmeldeinformationen über die Administratorrolle Hyper-V verfügen und sehen, welche VMs lokal auf dem Host ausgeführt und gestartet werden.

Beispiele und Benutzerhandbücher

PowerShell Direct unterstützt Just Enough Administration (JEA).

Schauen Sie sich Beispiele auf GitHub an.