Automatisierung und Verwaltung virtueller Computer mithilfe von PowerShellVirtual Machine automation and management using PowerShell

Sie können PowerShell Direct verwenden, um beliebige PowerShell-Befehle in einem virtuellen Computer unter Windows 10 oder Windows Server 2016 von Ihrem Hyper-V-Host aus auszuführen – unabhängig von der Netzwerkkonfiguration oder den Einstellungen für die Remoteverwaltung.You can use PowerShell Direct to run arbitrary PowerShell in a Windows 10 or Windows Server 2016 virtual machine from your Hyper-V host regardless of network configuration or remote management settings.

Es folgen einige Möglichkeiten, wie Sie PowerShell Direct ausführen können:Here are some ways you can run PowerShell Direct:

AnforderungenRequirements

Betriebssystemanforderungen:Operating system requirements:

  • Host: Windows 10, Windows Server 2016 oder höher mit Hyper-V.Host: Windows 10, Windows Server 2016, or later running Hyper-V.
  • Gast- bzw. virtueller Computer: Windows 10, Windows Server 2016 oder höher.Guest/Virtual Machine: Windows 10, Windows Server 2016, or later.

Wenn Sie ältere virtuelle Computer verwalten, verwenden Sie die Verbindung mit virtuellen Computern (VMConnect) oder Konfigurieren Sie ein virtuelles Netzwerk für den virtuellen Computer.If you're managing older virtual machines, use Virtual Machine Connection (VMConnect) or configure a virtual network for the virtual machine.

Konfigurationsanforderungen:Configuration requirements:

  • Der virtuelle Computer muss lokal auf dem Host ausgeführt werden.The virtual machine must be running locally on the host.
  • Der virtuelle Computer muss gestartet sein und mit mindestens einem konfigurierten Benutzerprofil ausgeführt werden.The virtual machine must be turned on and running with at least one configured user profile.
  • Sie müssen am Hostcomputer als Hyper-V-Administrator angemeldet sein.You must be logged into the host computer as a Hyper-V administrator.
  • Sie müssen gültige Anmeldeinformationen für den virtuellen Computer angeben.You must supply valid user credentials for the virtual machine.

Erstellen und Beenden einer interaktiven PowerShell-SitzungCreate and exit an interactive PowerShell session

Die einfachste Möglichkeit, PowerShell auf einem virtuellen Computer auszuführen, ist der Start einer interaktiven Sitzung.The easiest way to run PowerShell commands in a virtual machine is to start an interactive session.

Wenn die Sitzung gestartet wird, werden die eingegebenen Befehle auf dem virtuellen Computer ausgeführt – genau so, als würden Sie die Befehle direkt in eine PowerShell-Sitzung auf dem virtuellen Computer selbst eingeben.When the session starts, the commands that you type run on the virtual machine, just as though you typed them directly into a PowerShell session on the virtual machine itself.

So starten Sie eine interaktive Sitzung:To start an interactive session:

  1. Öffnen Sie PowerShell auf dem Hyper-V-Host als Administrator.On the Hyper-V host, open PowerShell as 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:Run one of the following commands to create an interactive session using the virtual machine name or GUID:

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

Geben Sie Anmeldeinformationen für den virtuellen Computer ein, wenn Sie dazu aufgefordert werden.Provide credentials for the virtual machine when prompted.

  1. Führen Sie Befehle auf dem virtuellen Computer aus.Run commands on your virtual machine.

Der Name des virtuellen Computers wird als Präfix (VMName) für Ihre PowerShell-Eingabeaufforderung angezeigt:You should see the VMName as the prefix for your PowerShell prompt as shown:

[VMName]: PS C:\>

Jeder Befehl wird auf dem virtuellen Computer ausgeführt.Any command run will be running on your virtual machine. Um dies zu testen, können Sie ipconfig oder hostname ausführen, um sicherzustellen, dass diese Befehle tatsächlich auf dem virtuellen Computer ausgeführt werden.To test, you can run ipconfig or hostname to make sure that these commands are running in the virtual machine.

  1. Wenn Sie fertig sind, führen Sie den folgenden Befehl zum Schließen der Sitzung aus:When you're done, run the following command to close the session:

    Exit-PSSession 
    

Hinweis: Wenn keine Verbindung für die Sitzung hergestellt werden kann, lesen Sie den Abschnitt Problembehandlung, um mögliche Ursachen herauszufinden.Note: If your session won't connect, see the troubleshooting for potential causes.

Weitere Informationen zu diesen Cmdlets finden Sie unter Enter-PSSession und Exit-PSSession.To learn more about these cmdlets, see Enter-PSSession and Exit-PSSession.


Ausführen eines Skripts oder Befehls mit „Invoke-Command“Run a script or command with Invoke-Command

PowerShell Direct mit Invoke-Command eignet sich ideal für Situationen, in denen Sie nur einen Befehl oder ein Skript auf einem virtuellen Computer ausführen, danach aber nicht weiter mit dem virtuellen Computer interagieren möchten.PowerShell Direct with Invoke-Command is perfect for situations where you need to run one command or one script on a virtual machine but do not need to continue interacting with the virtual machine beyond that point.

So führen Sie einen einzelnen Befehl aus:To run a single command:

  1. Öffnen Sie PowerShell auf dem Hyper-V-Host als Administrator.On the Hyper-V host, open PowerShell as Administrator.

  2. Führen Sie einen der folgenden Befehle aus, um eine Sitzung mit dem Namen oder der GUID des virtuellen Computers zu erstellen:Run one of the following commands to create a session using the virtual machine name or GUID:

    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.Provide credentials for the virtual machine when prompted.

    Der Befehl wird auf dem virtuellen Computer ausgeführt. Wenn der Befehl eine Konsolenausgabe umfasst, erfolgt diese auf Ihrer Konsole.The command will execute on the virtual machine, if there is output to the console, it'll be printed to your console. Die Verbindung wird automatisch geschlossen, nachdem der Befehl ausgeführt wurde.The connection will be closed automatically as soon as the command runs.

So führen Sie ein Skript aus:To run a script:

  1. Öffnen Sie PowerShell auf dem Hyper-V-Host als Administrator.On the Hyper-V host, open PowerShell as Administrator.

  2. Führen Sie einen der folgenden Befehle aus, um eine Sitzung mit dem Namen oder der GUID des virtuellen Computers zu erstellen:Run one of the following commands to create a session using the virtual machine name or GUID:

    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.Provide credentials for the virtual machine when prompted.

    Das Skript wird auf dem virtuellen Computer ausgeführt.The script will execute on the virtual machine. Die Verbindung wird automatisch geschlossen, nachdem der Befehl ausgeführt wurde.The connection will be closed automatically as soon as the command runs.

Weitere Informationen zu diesem Cmdlet finden Sie unter Invoke-Command.To learn more about this cmdlet, see Invoke-Command.


Kopieren von Dateien mit New-PSSession und Copy-ItemCopy files with New-PSSession and Copy-Item

Hinweis: PowerShell Direct unterstützt nur permanente Sitzungen in Windows-Build 14280 und höher.Note: PowerShell Direct only supports persistent sessions in Windows builds 14280 and later

Permanente PowerShell-Sitzungen sind unglaublich nützlich, wenn Sie Skripts schreiben, die Aktionen über einen oder mehrere Remotecomputer hinweg koordinieren.Persistent PowerShell sessions are incredibly useful when writing scripts that coordinate actions across one or more remote machines. Nach dem Erstellen sind permanente Sitzungen im Hintergrund vorhanden, bis Sie sich dafür entscheiden, sie zu löschen.Once created, persistent sessions exist in the background until you decide to delete them. Das bedeutet, dass Sie mit Invoke-Command und Enter-PSSession immer wieder auf die gleiche Sitzung verweisen können, ohne Anmeldeinformationen übergeben zu müssen.This means you can reference the same session over and over again with Invoke-Command or Enter-PSSession without passing credentials.

Ebenso behalten Sitzungen ihren Zustand bei.By the same token, sessions hold state. Da permanente Sitzungen – wie der Name schon sagt – dauerhaft sind, werden jegliche Variablen, die in einer Sitzung erstellt oder an eine Sitzung übergeben wurden, über mehrere Aufrufe hinweg beibehalten.Since persistent sessions persist, any variables created in a session or passed to a session will be preserved across multiple calls. Für die Arbeit mit permanenten Sitzungen sind verschiedene Tools verfügbar.There are a number of tools available for working with persistent sessions. In diesem Beispiel werden New-PSSession und Copy-Item verwendet, um Daten vom Host auf einen virtuellen Computer und von einem virtuellen Computer auf den Host zu verschieben.For this example, we will use New-PSSession and Copy-Item to move data from the host to a virtual machine and from a virtual machine to the host.

So erstellen Sie eine Sitzung und kopieren anschließend Dateien:To create a session then copy files:

  1. Öffnen Sie PowerShell auf dem Hyper-V-Host als Administrator.On the Hyper-V host, open PowerShell as Administrator.

  2. Führen Sie einen der folgenden Befehle aus, um mit New-PSSession eine permanente PowerShell-Sitzung auf dem virtuellen Computer zu erstellen.Run one of the following commands to create a persistent PowerShell session to the virtual machine using New-PSSession.

$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.Provide credentials for the virtual machine when prompted.

Warnung:Warning:
Builds vor Buildnummer 14500 weisen einen Fehler auf.There is a bug in builds before 14500. Wenn Anmeldeinformationen nicht explizit mit dem Flag -Credential angegeben werden, stürzt der Dienst im Gastsystem ab und muss neu gestartet werden.If credentials aren't explicitly specified with -Credential flag, the service in the guest will crash and will need to be restarted. Wenn dieses Problem auftritt, finden Sie hier Anweisungen zur Umgehung.If you hit this issue, workaround instructions are available here.

  1. Kopieren Sie eine Datei auf den virtuellen Computer.Copy a file into the virtual machine.

Um C:\host_path\data.txt vom Host auf den virtuellen Computer zu kopieren, führen Sie folgenden Befehl aus:To copy C:\host_path\data.txt to the virtual machine from the host machine, run:

Copy-Item -ToSession $s -Path C:\host_path\data.txt -Destination C:\guest_path\
  1. Kopieren Sie eine Datei vom virtuellen Computer auf den Host.Copy a file from the virtual machine (on to the host).

Um C:\guest_path\data.txt vom virtuellen Computer auf den Host zu kopieren, führen Sie folgenden Befehl aus:To copy C:\guest_path\data.txt to the host from the virtual machine, run:

Copy-Item -FromSession $s -Path C:\guest_path\data.txt -Destination C:\host_path\
  1. Beenden Sie die permanente Sitzung mit Remove-PSSession.Stop the persistent session using Remove-PSSession.
Remove-PSSession $s

ProblembehandlungTroubleshooting

PowerShell Direct zeigt eine kleine Menge von Fehlermeldungen an.There are a small set of common error messages surfaced through PowerShell Direct. Es folgen die häufigsten davon, verschiedene Ursachen und Tools für die Untersuchung von Problemen.Here are the most common, some causes, and tools for diagnosing issues.

Parameter „-VMName“ oder „-VMID“ nicht vorhanden-VMName or -VMID parameters don't exist

Problem:Problem:
Enter-PSSession, Invoke-Command oder New-PSSession weisen keinen Parameter -VMName oder -VMId auf.Enter-PSSession, Invoke-Command, or New-PSSession do not have a -VMName or -VMId parameter.

Mögliche Ursachen:Potential causes:
Der wahrscheinlichste Grund ist, dass PowerShell Direct von Ihrem Hostbetriebssystem nicht unterstützt wird.The most likely issue is that PowerShell Direct isn't supported by your host operating system.

Sie können Ihren Windows-Build mithilfe des folgenden Befehls überprüfen:You can check your Windows build by running the following command:

[System.Environment]::OSVersion.Version

Wenn Sie einen unterstützten Build ausführen, ist es auch möglich, dass Ihre PowerShell-Version PowerShell Direct nicht unterstützt.If you are running a supported build, it is also possible your version of PowerShell does not run PowerShell Direct. Um PowerShell Direct und JEA verwenden zu können, müssen Sie über Hauptversion 5 oder höher verfügen.For PowerShell Direct and JEA, the major version must be 5 or later.

Sie können Ihren PowerShell-Versionsbuild mithilfe des folgenden Befehls überprüfen:You can check your PowerShell version build by running the following command:

$PSVersionTable.PSVersion

Fehler: Eine Remotesitzung wurde möglicherweise getrennt.Error: A remote session might have ended

Hinweis:Note:
Bei Eingabe von „Enter-PSSession“ auf Hosts mit Builds zwischen 10240 und 12400 werden alle unten stehenden Fehler als „Eine Remotesitzung wurde möglicherweise beendet.“ gemeldet.For Enter-PSSession between host builds 10240 and 12400, all errors below reported as "A remote session might have ended".

Fehlermeldung:Error message:

Enter-PSSession : An error has occurred which Windows PowerShell cannot handle. A remote session might have ended.

Mögliche Ursachen:Potential causes:

  • Der virtuelle Computer ist vorhanden, wird aber nicht ausgeführt.The virtual machine exists but is not running.
  • Das Gastbetriebssystem unterstützt PowerShell Direct nicht (Informationen finden Sie in den Anforderungen).The guest OS does not support PowerShell Direct (see requirements)
  • PowerShell ist noch nicht auf dem Gast verfügbar.PowerShell isn't available in the guest yet
    • Der Startvorgang des Betriebssystems ist noch nicht abgeschlossen.The operating system hasn't finished booting
    • Das Betriebssystem kann nicht ordnungsgemäß starten.The operating system can't boot correctly
    • Bei einigen Ereignissen zur Startzeit sind Benutzereingaben erforderlich.Some boot time event needs user input

Sie können das Cmdlet Get-VM verwenden, um zu überprüfen, welche virtuellen Computer auf dem Host ausgeführt werden.You can use the Get-VM cmdlet to check to see which VMs are running on the host.

Fehlermeldung:Error message:

New-PSSession : An error has occurred which Windows PowerShell cannot handle. A remote session might have ended.

Mögliche Ursachen:Potential causes:

  • Einer der oben genannten Gründe – alle sind gleichermaßen anwendbar für New-PSSessionOne of the reasons listed above -- they all are equally applicable to New-PSSession
  • Ein Fehler in aktuellen Builds. Anmeldeinformationen müssen explizit mithilfe von -Credential übergeben werden.A bug in current builds where credentials must be explicitly passed with -Credential. Wenn dies passiert, reagiert der gesamte Dienst im Gastbetriebssystem nicht mehr und muss neu gestartet werden.When this happens, the entire service hangs in the guest operating system and needs to be restarted. Sie können mit Enter-PSSession überprüfen, ob die Sitzung noch verfügbar ist.You can check if the session is still available with Enter-PSSession.

Um das Problem mit den Anmeldeinformationen zu umgehen, melden Sie sich mithilfe von VMConnect am virtuellen Computer an, öffnen Sie PowerShell, und starten Sie den vmicvmsession-Dienst mithilfe des folgenden PowerShell-Befehls neu:To work around the credential issue, log into the virtual machine using VMConnect, open PowerShell, and restart the vmicvmsession service using the following PowerShell:

Restart-Service -Name vmicvmsession

Fehler: Parametersatz kann nicht aufgelöst werden.Error: Parameter set cannot be resolved

Fehlermeldung:Error message:

Enter-PSSession : Parameter set cannot be resolved using the specified named parameters.

Mögliche Ursachen:Potential causes:

  • -RunAsAdministrator wird beim Herstellen von Verbindungen mit virtuellen Computern nicht unterstützt.-RunAsAdministrator is not supported when connecting to virtual machines.

    Beim Verbinden mit einem Windows-Container erlaubt das Flag -RunAsAdministrator Administratorverbindungen ohne explizite Anmeldeinformationen.When connecting to a Windows container, the -RunAsAdministrator flag allows Administrator connections without explicit credentials. Da virtuelle Computer dem Host keinen impliziten Administratorzugriff gewähren, müssen Sie die Anmeldeinformationen explizit eingeben.Since virtual machines do not give the host implied administrator access, you need to explicitly enter credentials.

Administratoranmeldeinformationen können dem virtuellen Computer über den Parameter -Credential übergeben oder auf Aufforderung manuell eingegeben werden.Administrator credentials can be passed to the virtual machine with the -Credential parameter or by entering them manually when prompted.

Fehler: Die Anmeldeinformationen sind ungültig.Error: The credential is invalid.

Fehlermeldung:Error message:

Enter-PSSession : The credential is invalid.

Mögliche Ursachen:Potential causes:

  • Die Gastanmeldeinformationen konnten nicht überprüft werden.The guest credentials couldn't be validated
    • Die angegebenen Anmeldeinformationen sind falsch.The supplied credentials were incorrect.
    • Es gibt keine Benutzerkonten auf dem Gast (das Betriebssystem wurde noch nicht gestartet)There are no user accounts in the guest (the OS hasn't booted before)
    • Wenn Sie die Verbindung als Administrator herstellen: Der Administrator wurde nicht als aktiver Benutzer festgelegt.If connecting as Administrator: Administrator has not been set as an active user. Weitere Informationen finden Sie hier.Learn more here.

Fehler: Der Parameter „VMName“ kann nicht in einen virtuellen Computer aufgelöst werden.Error: The input VMName parameter does not resolve to any virtual machine.

Fehlermeldung:Error message:

Enter-PSSession : The input VMName parameter does not resolve to any virtual machine.

Mögliche Ursachen:Potential causes:

  • Sie sind kein Hyper-V-Administrator.You are not a Hyper-V Administrator.
  • Der virtuelle Computer ist nicht vorhanden.The virtual machine doesn't exist.

Mit dem Cmdlet Get-VM können Sie überprüfen, ob die von Ihnen verwendeten Anmeldeinformationen die Rolle „Hyper-V-Administrator“ enthalten und welche VMs lokal auf dem Host ausgeführt werden und gestartet wurden.You can use the Get-VM cmdlet to check that the credentials you're using have the Hyper-V administrator role and to see which VMs are running locally on the host and booted.


Beispiele und BenutzerleitfädenSamples and User Guides

PowerShell Direct unterstützt JEA (Just Enough Administration).PowerShell Direct supports JEA (Just Enough Administration). Informationen zum Ausprobieren finden Sie in diesem Benutzerleitfaden.Check out this user guide to try it.

Sehen Sie sich die Beispiele auf GitHub an.Check out samples on GitHub.