Delen via


Automatisering en beheer van virtuele machines met behulp van PowerShell

U kunt PowerShell Direct gebruiken om willekeurige PowerShell uit te voeren in een Windows 10 of hoger, of windows Server 2016 of nieuwere virtuele machine vanaf uw Hyper-V host. Gebruik PowerShell Direct, ongeacht de netwerkconfiguratie of instellingen voor extern beheer.

Hier volgen enkele manieren waarop u PowerShell Direct kunt uitvoeren:

Requirements

Vereisten voor het besturingssysteem:

  • Host: Windows 10, Windows Server 2016 of hoger met Hyper-V.
  • Gast/virtuele machine: Windows 10, Windows Server 2016 of hoger.

Als u oudere virtuele machines beheert, gebruikt u Virtual Machine Connection (VMConnect) of maakt u verbinding via een netwerkverbinding.

Configuratievereisten:

  • De virtuele machine moet lokaal worden uitgevoerd op de host.
  • De virtuele machine moet worden ingeschakeld en uitgevoerd met ten minste één geconfigureerd gebruikersprofiel.
  • U moet als Hyper-V-beheerder zijn aangemeld bij de hostcomputer.
  • U moet geldige gebruikersreferenties opgeven voor de virtuele machine.

Een interactieve PowerShell-sessie maken en afsluiten

De eenvoudigste manier om PowerShell-opdrachten uit te voeren op een virtuele machine is door een interactieve sessie te starten.

Wanneer de sessie wordt gestart, worden de opdrachten die u typt, uitgevoerd op de virtuele machine, net zoals u ze rechtstreeks hebt getypt in een PowerShell-sessie op de virtuele machine zelf.

Een interactieve sessie starten:

  1. Open PowerShell als administrator op de Hyper-V-host.

  2. Voer een van de volgende opdrachten uit om een interactieve sessie te maken met behulp van de naam of GUID van de virtuele machine:

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

    Voer de referenties voor de virtuele machine in wanneer u hierom wordt gevraagd.

  3. Voer opdrachten uit op uw virtuele machine. Als het goed is, ziet u de VMName als voorvoegsel voor uw PowerShell-prompt:

    [VMName]: PS C:\>
    

    Elke opdracht die u uitvoert, wordt uitgevoerd op uw virtuele machine. Voer om te testen ipconfig of hostname uit om te controleren of deze opdrachten worden uitgevoerd op de virtuele machine.

  4. Wanneer u klaar bent, voert u de volgende opdracht uit om de sessie te sluiten:

     Exit-PSSession 
    

Opmerking

Als uw sessie geen verbinding maakt, raadpleegt u de probleemoplossing voor mogelijke oorzaken.

Zie Enter-PSSession en Exit-PSSession voor meer informatie over deze cmdlets.

Een script of opdracht uitvoeren met Invoke-Command

PowerShell Direct met Invoke-Command is perfect voor situaties waarin u één opdracht of één script op een virtuele machine moet uitvoeren, maar u niet verder hoeft te communiceren met de virtuele machine dan dat punt.

Eén opdracht uitvoeren:

  1. Open PowerShell als administrator op de Hyper-V-host.

  2. Voer een van de volgende opdrachten uit om een sessie te maken met behulp van de naam of GUID van de virtuele machine:

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

    Voer de referenties voor de virtuele machine in wanneer u hierom wordt gevraagd.

    De opdracht wordt uitgevoerd op de virtuele machine. Als de opdracht uitvoer produceert, ziet u deze in uw console. De verbinding wordt automatisch gesloten zodra de opdracht wordt uitgevoerd.

Een script uitvoeren:

  1. Open PowerShell als administrator op de Hyper-V-host.

  2. Voer een van de volgende opdrachten uit om een sessie te maken met behulp van de naam of GUID van de virtuele machine:

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

    Voer de referenties voor de virtuele machine in wanneer u hierom wordt gevraagd.

    Het script wordt uitgevoerd op de virtuele machine. De verbinding wordt automatisch gesloten zodra de opdracht wordt uitgevoerd.

Zie Invoke-Command voor meer informatie over deze cmdlet.

Bestanden kopiëren met New-PSSession en Copy-Item

Opmerking

PowerShell Direct ondersteunt alleen permanente sessies in Windows-builds 14280 en hoger

Permanente PowerShell-sessies zijn ongelooflijk nuttig bij het schrijven van scripts die acties coördineren op een of meer externe machines. Zodra deze zijn gemaakt, bestaan permanente sessies op de achtergrond totdat u besluit ze te verwijderen. Dit betekent dat u telkens opnieuw naar dezelfde sessie kunt verwijzen met Invoke-Command of Enter-PSSession zonder referenties door te geven.

Met hetzelfde token houden sessies de status vast. Aangezien permanente sessies behouden blijven, blijven alle variabelen die u in een sessie maakt of doorgegeven aan een sessie, behouden voor meerdere aanroepen. U kunt een aantal hulpprogramma's gebruiken om te werken met permanente sessies. In dit voorbeeld gebruikt u New-PSSession en Copy-Item om gegevens van de host naar een virtuele machine en van een virtuele machine naar de host te verplaatsen.

Als u een sessie wilt maken, kopieert u vervolgens bestanden:

  1. Open PowerShell als administrator op de Hyper-V-host.

  2. Voer een van de volgende opdrachten uit om een permanente PowerShell-sessie naar de virtuele machine te maken met behulp van New-PSSession.

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

    Voer de referenties voor de virtuele machine in wanneer u hierom wordt gevraagd.

    Waarschuwing

    Er is een fout in builds vóór 14500. Als u niet expliciet referenties opgeeft met de -Credential vlag, loopt de service in de gast vast en moet deze opnieuw worden opgestart. Als u dit probleem ondervindt, raadpleegt u de sectieFout: een externe sessie is mogelijk beëindigd voor tijdelijke instructies.

  3. Kopieer een bestand naar de virtuele machine.

    Als u vanaf de hostmachine naar de virtuele machine wilt kopiëren C:\host_path\data.txt , voert u het volgende uit:

    Copy-Item -ToSession $s -Path C:\host_path\data.txt -Destination C:\guest_path\
    
  4. Kopieer een bestand van de virtuele machine (naar de host).

    Als u vanaf de virtuele machine naar de host wilt kopiëren C:\guest_path\data.txt , voert u het volgende uit:

    Copy-Item -FromSession $s -Path C:\guest_path\data.txt -Destination C:\host_path\
    
  5. Stop de permanente sessie met behulp van Remove-PSSession.

    Remove-PSSession $s
    

Probleemoplossingsproces

PowerShell Direct geeft een kleine set veelvoorkomende foutberichten weer. In de volgende secties worden de meest voorkomende foutberichten, enkele oorzaken en hulpprogramma's beschreven voor het diagnosticeren van problemen.

-VMName of -VMID parameters bestaan niet

Probleem:

Enter-PSSession, Invoke-Command, of New-PSSession hebben geen -VMName of -VMId parameter.

Mogelijke oorzaken:

Het meest waarschijnlijke probleem is dat uw hostbesturingssysteem geen ondersteuning biedt voor PowerShell Direct.

U kunt uw Windows-build controleren door de volgende opdracht uit te voeren:

[System.Environment]::OSVersion.Version

Als u een ondersteunde build uitvoert, is het ook mogelijk dat uw versie van PowerShell geen ondersteuning biedt voor PowerShell Direct. Voor PowerShell Direct en JEA moet de primaire versie 5 of hoger zijn.

U kunt de Build van uw PowerShell-versie controleren door de volgende opdracht uit te voeren:

$PSVersionTable.PSVersion

Fout: een externe sessie is mogelijk beëindigd

Opmerking

Voor Enter-PSSession tussen host builds 10240 en 12400 worden alle fouten gerapporteerd als 'Een externe sessie is mogelijk beëindigd'.

Foutmelding:

Enter-PSSession: er is een fout opgetreden die niet kan worden verwerkt met Windows PowerShell. Een externe sessie is mogelijk beëindigd.

Mogelijke oorzaken:

  • De virtuele machine bestaat, maar is niet gestart.
  • Het gastbesturingssysteem biedt geen ondersteuning voor PowerShell Direct. Zie vereisten.
  • PowerShell is nog niet beschikbaar in de gast
    • Het besturingssysteem heeft het opstarten niet voltooid
    • Het besturingssysteem kan niet correct worden opgestart
    • Voor een gebeurtenis met opstarttijd is gebruikersinvoer vereist

Gebruik de cmdlet Get-VM om te controleren welke VM's op de host worden uitgevoerd.

Foutmelding:

New-PSSession: er is een fout opgetreden die niet kan worden verwerkt met Windows PowerShell. Een externe sessie is mogelijk beëindigd.

Mogelijke oorzaken:

  • Een van de eerder vermelde redenen : ze zijn allemaal van toepassing op New-PSSession
  • Er is een bug in de huidige builds waarbij je verplicht bent expliciet je inloggegevens door te geven.-Credential Wanneer deze fout optreedt, loopt de hele service vast in het gastbesturingssysteem en moet deze opnieuw worden opgestart. U kunt controleren of de sessie nog steeds beschikbaar is met Enter-PSSession.

Als u het referentieprobleem wilt omzeilen, meldt u zich aan bij de virtuele machine met behulp van VMConnect, opent u PowerShell en start u de vmicvmsession-service opnieuw met de volgende PowerShell-opdracht:

Restart-Service -Name vmicvmsession

Fout: parameterset kan niet worden opgelost

Foutmelding:

Enter-PSSession: Parameterset kan niet worden omgezet met behulp van de opgegeven benoemde parameters.

Mogelijke oorzaken:

  • U kunt -RunAsAdministrator niet gebruiken bij het verbinden met virtuele machines.

    Wanneer u verbinding maakt met een Windows-container, staat de -RunAsAdministrator vlag beheerdersverbindingen zonder expliciete referenties toe. Omdat virtuele machines de host geen impliciete beheerdersrechten geven, moet u expliciet aanmeldgegevens invoeren.

U kunt beheerdersreferenties doorgeven aan de virtuele machine met de -Credential parameter of door ze handmatig in te voeren wanneer hierom wordt gevraagd.

Fout: de referentie is ongeldig

Foutmelding:

Enter-PSSession: de referentie is ongeldig.

Mogelijke oorzaken:

  • De gastreferenties kunnen niet worden gevalideerd
    • De opgegeven referenties zijn onjuist.
    • Er zijn geen gebruikersaccounts in de gast (het besturingssysteem is niet eerder opgestart)
    • Als u verbinding maakt als beheerder: Beheerder is niet ingesteld als een actieve gebruiker. Zie Het ingebouwde administratoraccount in- en uitschakelen voor meer informatie.

Fout: de parameter VMName van invoer wordt niet omgezet in een virtuele machine.

Foutmelding:

Enter-PSSession: de parameter input VMName wordt niet omgezet in een virtuele machine.

Mogelijke oorzaken:

  • U bent geen Hyper-V-beheerder.
  • De virtuele machine bestaat niet.

Gebruik de cmdlet Get-VM om te controleren of de referenties die u gebruikt de beheerdersrol Hyper-V hebben en om te zien welke VM's lokaal op de host worden uitgevoerd en opgestart.

Voorbeelden en gebruikershandleidingen

PowerShell Direct ondersteunt Just Enough Administration (JEA).

Bekijk voorbeelden op GitHub.