Het beheren van Hyper-V omgevingen kan een uitdagende taak zijn. Daarom heb je een krachtige beheertool nodig om je virtuele infrastructuur te configureren en te controleren vanuit een centrale console. Naast de grafische gebruikersinterface biedt Hyper-V een opdrachtregelinterface met PowerShell voor Hyper-V-beheer.
In deze blogpost beschrijven we hoe PowerShell werkt, welke Hyper-V PowerShell-opdrachten de prestaties van virtuele machines (VM’s) kunnen verbeteren, en hoe deze CLI-tool het proces van Hyper-V-beheer aanzienlijk kan vereenvoudigen.
Wat is PowerShell?
PowerShell is een takenautomatiserings- en configuratiebeheerkader ontwikkeld door Microsoft, dat een opdrachtregelshell en bijbehorende scripttaal omvat, gebouwd op het .NET Framework en .NET Core.
PowerShell-opdrachten, ook wel cmdlets genoemd, kunnen worden gebruikt om verschillende taken te automatiseren door meerdere cmdlets te combineren in een enkel PowerShell-script. Microsoft heeft meer dan honderd kern-PowerShell-opdrachten ontwikkeld die kunnen worden gebruikt voor het uitvoeren van complexe en eenvoudige taken.
Wat kan PowerShell doen?
PowerShell kan Hyper-V-beheerders helpen bij het snel automatiseren van taken die besturingssystemen (Linux, macOS en Windows) en bijbehorende processen beheren. In tegenstelling tot GUI-tools, stelt PowerShell je in staat het gehele systeem te beheren met alleen de opdrachtregel.
Bovendien kun je vereiste Hyper-V PowerShell-opdrachten opslaan in een tekstbestand (met de .ps1-extensie) en vervolgens dit script uitvoeren om bepaalde taken uit te voeren. Bovendien kun je PowerShell-scripts plannen om op een vastgesteld tijdstip uit te voeren met Taakplanner.
Hoe PowerShell te openen
Er zijn een paar manieren waarop we PowerShell kunnen uitvoeren in Hyper-V. Een eenvoudige manier om toegang te krijgen tot PowerShell is door rechtstreeks verbinding te maken met een Hyper-V-server en het van daaruit te starten. Om op afstand verbinding te maken met een Hyper-V-host, moeten we ervoor zorgen dat Extern bureaublad is ingeschakeld. Nadat Extern bureaublad is ingeschakeld, kunnen we het hulpprogramma Extern bureaublad gebruiken en op afstand verbinding maken met de server zoals we dat zouden doen met een willekeurige Windows Server GUI (grafische gebruikersinterface).
PowerShell openen vanuit de GUI
Om PowerShell te openen in een op een GUI gebaseerd besturingssysteem, volgt u deze stappen:
- U moet op Start klikken en PowerShell typen in de zoekbalk.
- Klik met de rechtermuisknop op het PowerShell-pictogram en selecteer Uitvoeren als administrator om PowerShell te openen in verhoogde modus.
PowerShell openen vanaf de opdrachtregel
Om PowerShell uit te voeren als u Windows Server Core of Hyper-V Server gebruikt, volgt u deze stappen:
- Typ PowerShell in de Opdrachtprompt en druk op Enter.
- A Windows PowerShell session should start automatically in the Command Prompt window. A PS prefix is then added to the command prompt to indicate that you have started a Windows PowerShell session.
- Zodra u in PowerShell bent, kunt u specifieke PowerShell-opdrachten voor Hyper-V gebruiken, die we hieronder in deze post behandelen.
Externe instellingen
Om externe bureaubladinstellingen te controleren in Windows Server Core of Hyper-V Server, kunt u het hulpprogramma sconfig starten als dit nog niet is gestart, en het configureren met behulp van optie 7. Ook kunt u, eenmaal op afstand verbonden met de Hyper-V-host, optie 15 gebruiken om Afsluiten naar de opdrachtregel.
Eenmaal daar, bevind je je in een normale cmd.exe omgeving – geen PowerShell. Om een PowerShell-omgeving te starten, typ eenvoudigweg ‘powershell’ op de opdrachtregel.
Externe PowerShell
Met PowerShell kun je ook op afstand communiceren met Hyper-V. Met andere woorden, je kunt op afstand PowerShell-opdrachten uitvoeren op de Hyper-V-host zonder een externe desktopverbinding tot stand te brengen.
Vanaf de beheerswerkstation waarop we Hyper-V-beheertools hebben geladen, kunnen we onze Hyper-V-commando’s uitvoeren. Allereerst moeten we de Hyper-V-tools installeren, inclusief deze commando’s (cmdlets).
Install-WindowsFeature RSAT-Hyper-V-Tools
Zodra we de tools geladen hebben, kunnen we dezelfde soort opdrachten uitvoeren met behulp van de parameter ‘-computername’ die wijst naar onze Hyper-V-host zoals in de onderstaande schermafbeelding. We geven de naam van onze host door aan het PowerShell-commando get-vm.
12 Essentiële Hyper-V PowerShell-opdrachten
Er zijn een aantal effectieve Hyper-V PowerShell-opdrachten die het proces van het beheren van Hyper-V gemakkelijk en eenvoudig kunnen maken. Laten we eens kijken hoe je verschillende Hyper-V PowerShell-opdrachten kunt gebruiken.
Get-Command
Laten we beginnen met een Hyper-V PowerShell-opdracht die handig is voor gebruikers die nieuw zijn in PowerShell en niet weten welke cmdlets moeten worden gebruikt en hoe. Door het uitvoeren van het Get-Command cmdlet, kun je de volledige lijst zien van alle beschikbare cmdlets (Windows PowerShell-opdrachten), functies en aliassen die zijn geïnstalleerd op de computer.
Indien je je zoekopdracht wilt verfijnen en een lijst van Hyper-V PowerShell-commando’s wilt krijgen die aan specifieke criteria voldoen, kun je de Get-Command *-VM cmdlet gebruiken om de lijst van commando’s te vinden die je in staat stellen VM’s te controleren en configureren.
Door de VM-parameter te wijzigen naar VHD, kun je de volledige lijst van cmdlets krijgen die worden gebruikt voor het beheren van virtuele harde schijven. Op die manier kun je verschillende zoekparameters uitproberen om de gewenste resultaten te krijgen.
Get-Help
Zodra je hebt besloten welk Hyper-V PowerShell-commando je wilt gebruiken, kun je meer informatie over dat cmdlet opvragen. Hiervoor kun je de Get-Help cmdlet gebruiken. Om bijvoorbeeld meer te weten te komen over het Get-VM cmdlet, typ je het volgende:
Get-Help Get-VM
Get-VM
Het Get-VM PowerShell-commando stelt je in staat om alle beschikbare VM’s te zien op een of meer Hyper-V-hosts. Om alle VM’s op de lokale Hyper-V-host te zien, dien je het Get-VM PowerShell-cmdlet uit te voeren.
Op het PowerShell-scherm kun je de lijst van beschikbare VM’s zien, inclusief hun naam, status, CPU-gebruik, toegewezen geheugen, uptime, status en versie.
Start-VM
Dit specifieke start VM PowerShell-cmdlet helpt je een VM te starten. Voer hiervoor het volgende Hyper-V PowerShell-commando uit:
Start-VM -Name 'Windows Server 2016'
Als gevolg daarvan wordt de VM met de naam Windows Server 2016 gestart op je lokale Hyper-V-host. Laten we controleren of de VM daadwerkelijk is gestart door het Get-VM cmdlet uit te voeren.
Bovendien kunt u een aangepaste versie van de Start-VM PowerShell-cmdlet gebruiken om VM’s alleen te starten als hun namen beginnen met Hyper-V:
Start-VM -Name Hyper-V*
Zoals u kunt zien, is de VM met de naam Hyper-V Server Desktop succesvol gestart. Echter, een andere VM (Hyper-V Server 2012) was al in een actieve staat en PowerShell meldt u hiervan.
Stop-VM
De Stop-VM cmdlet stelt u in staat om een VM af te sluiten of uit te schakelen. Hiervoor kunt u de volgende cmdlet uitvoeren:
Stop-VM -Name 'Windows Server 2016'
Zoals u kunt zien, is de geselecteerde VM succesvol afgesloten via het gast-OS.
Een ander voorbeeld is dat u de VM’s kunt uitschakelen waarvan de namen beginnen met Hyper-V:
Stop-VM -Name Hyper-V* -TurnOff
Als u merkt dat uw VM niet reageert, kunt u deze gedwongen uitschakelen. Voer hiervoor de volgende PowerShell-cmdlet uit:
Stop-VM -Name 'Windows Server 2016' -Force
Merk op dat een gedwongen uitschakeling vergelijkbaar is met het uitschakelen van de stroom op een fysieke machine, wat kan resulteren in het verlies van niet-opgeslagen toepassingsgegevens. In dit geval wordt aanbevolen om de VM op te slaan om potentieel gegevensverlies te voorkomen. Hiervoor moet u de Save-VM cmdlet uitvoeren, wat equivalent is aan het in de slaapstand brengen van een fysieke computer:
Save-VM -Name 'Windows Server 2016'
Als u de VM’s wilt opslaan waarvan de namen beginnen met Hyper-V, voert u de volgende Hyper-V PowerShell-opdracht uit:
Get-VM -Name Hyper-V* | Save-VM
“`
Checkpoint-VM
De cmdlet Checkpoint-VM helpt u bij het maken van een Hyper-V VM-checkpoint (ook bekend als een Hyper-V snapshot). Voer de volgende cmdlet uit om een checkpoint met de naam Update1 van de specifieke VM (Windows Server 2016) te maken:
Checkpoint-VM -Name 'Windows Server 2016' -SnapshotName Update1
Om te controleren of de VM succesvol is aangemaakt, gebruikt u het volgende Hyper-V PowerShell-commando:
Get-VMSnapshot -VMName 'Windows Server 2016'
Aan de andere kant, als u bepaalde Hyper-V snapshots wilt verwijderen, kunt u de Remove-VMSnapshot cmdlet gebruiken. Als we bijvoorbeeld alle VM-snapshots willen verwijderen waarvan de namen beginnen met Testing, moeten we de volgende cmdlet uitvoeren:
Get-VM 'Hyper-V Server 2012' | Remove-VMSnapshot -Name Testing*
De bovenstaande schermafbeelding toont het gehele proces van het verwijderen van de geselecteerde Hyper-V snapshots.
Test-VHD
Dit Hyper-V PowerShell-commando is bedoeld om te verifiëren dat het virtuele harde schijfbestand daadwerkelijk bestaat en kan worden gebruikt voor Hyper-V-implementatie. Deze cmdlet is als volgt:
Test-VHD -Path C:\Testing.vhd
In het geval dat het VHD-pad geldig is, zou u de volgende uitvoer op uw scherm zien:
Om meer over het beheer van virtuele harde schijven met PowerShell cmdlets te leren, raden we u aan onze blogpost over de basics van het werken met Hyper-V VHD en VHDX bestanden te lezen.
Measure-VM
Met dit Hyper-V PowerShell commando kunt u resourcegebruiksgegevens verzamelen voor een bepaalde VM. Bijvoorbeeld, voer het volgende cmdlet uit om informatie te krijgen over CPU-gebruik, RAM-gebruik, schijfcapaciteit en netwerkverkeer voor de VM genaamd Windows Server 2016:
Measure-VM -VMName 'Windows Server 2016'
Let op dat het Measure-VM cmdlet vereist gegevens kan rapporteren alleen na het inschakelen van resourcemeting op een VM. Om resourcemeting in te schakelen, gebruik het volgende Hyper-V PowerShell commando:
Enable-VMResourceMetering -VMName 'Windows Server 2016'
Get-VMNetworkAdapter
Een andere nuttige PowerShell cmdlet is Get-VMNetworkAdapter, die u toestaat de virtuele netwerkadapters van de geselecteerde VM te identificeren. Bijvoorbeeld, als u virtuele netwerkadapters van alle VMs en het beheerbedrijfsysteem wilt vinden, moet u het volgende Hyper-V PowerShell commando uitvoeren:
Get-VMNetworkAdapter –All
Als alles correct is, ziet u het volgende informatie in uw PowerShell console:
Met Hyper-V PowerShell opdrachten kunt u eenvoudige tot complexe taken uitvoeren met uw Hyper-V netwerkadapters. Raadpleeg onze gids over de cmdlets die u kunnen helpen bij het beheren en configureren van virtuele netwerkadapters in uw Hyper-V omgeving.
Update-VMVersion
Met behulp van deze PowerShell-cmdlet kunt u de versie van de geselecteerde VM bijwerken:
Update-VMVersion -Name 'TestVM'
Na het uitvoeren van deze Hyper-V PowerShell-opdracht kan de virtuele machine met de naam TestVM worden bijgewerkt naar de huidige VM-versie.
Get-Process
Met deze Hyper-V PowerShell-opdracht kunt u alle huidige processen op uw lokale computer zien. Na het uitvoeren van de Get-Process-opdracht krijgt u het volgende informatie op het scherm:
Deze tabel bevat informatie over:
- het aantal handvatten dat het proces heeft geopend
- het bedrag aan niet-paginagegeheugen dat het proces gebruikt
- het bedrag aan paginageheugen dat het proces gebruikt
- de grootte van de werkset van het proces
- het bedrag aan virtueel geheugen dat het proces gebruikt
- het bedrag aan toegewezen processor tijd voor alle processoren
- het proces-id
- de procesnaam
Om de zoekopdracht te verfijnen en een specifiek proces te vinden, moet je de procesnaam of ID typen. Als je bijvoorbeeld wilt weten hoe Microsoft Word momenteel werkt, moet je door de lijst met alle lopende processen kijken en de regel vinden met de informatie over Microsoft Word (dat wil zeggen, WinWord), inclusief het proces-ID. Met behulp van het proces-ID kun je de volgende cmdlet uitvoeren om de nodige gegevens te krijgen:
Get-Process -ID 8892
Bovendien kan de informatie over de huidige WinWord-processen in een andere indeling worden gepresenteerd, namelijk als een lijst met eigenschappen. Voer deze cmdlet uit om een gedetailleerdere uitvoer te krijgen:
Get-Process WINWORD | Format-List *
Nadat je de procesgegevens hebt verkregen, kun je de volgende cmdlets uitvoeren:
Stop-Process
Hiermee kun je een of meer actieve processen stoppen.Wait-Process
Hiermee kun je wachten tot een of meer actieve processen zijn gestopt voordat je andere invoer inschakelt.Start-Process
Hiermee kun je een of meer processen op de lokale computer starten.Debug-Process
Hiermee kun je een debugger koppelen aan een of meer actieve processen op de lokale computer.
Als je bijvoorbeeld de toepassing Notepad vanuit PowerShell wilt starten, moet je de volgende cmdlet uitvoeren:
Start-Process -FilePath "notepad.exe"
Een ander voorbeeld is wanneer je PowerShell hebt geopend in “normale” modus, maar je PowerShell moet uitvoeren in verhoogde modus om toegang te krijgen tot beheerdersrechten. In dat geval voer je het volgende Hyper-V PowerShell-commando uit:
Start-Process -FilePath "powershell" -Verb RunAs
Aan de andere kant, als een van de lopende processen niet reageert, kun je het Stop-Process cmdlet uitvoeren om de mislukte applicatie te stoppen:
Stop-Process -Name "notepad"
In dit geval worden alle exemplaren van de Notepad-toepassing op de lokale computer gestopt.
Elk Notepad-exemplaar heeft zijn eigen proces-ID. Als je een specifiek Notepad-exemplaar wilt stoppen, moet je de ID-parameter gebruiken in het Stop-Process cmdlet. Hiervoor moet je eerst het Get-Process cmdlet uitvoeren, de vereiste actieve processen vinden en de proces-ID identificeren die je wilt stoppen.
Bijvoorbeeld, je kunt het specifieke Notepad-proces stoppen door de proces-ID te identificeren en het volgende Hyper-V PowerShell-commando uit te voeren:
Stop-Process -ID 5052
Als gevolg hiervan wordt alleen het geselecteerde Notepad-proces gestopt.
Deze PowerShell-commando’s stellen je in staat om een proces te detecteren dat ongewenste resources verbruikt en de Hyper-V-prestaties vermindert om dit proces te beëindigen.
Where-Object
Deze Hyper-V PowerShell-opdracht stelt u in staat pijplijnobjecten te filteren en de exacte gegevens te vinden die u nodig hebt. In dit geval moet u een PowerShell-script maken waarin u specificeert welke objecten kunnen worden doorgegeven langs de pijplijn. Met behulp van verschillende zoekcriteria kunt u elk object op de lokale computer vinden.
Bijvoorbeeld, als u de processen wilt vinden die zijn gestopt met uitvoeren, gebruikt u deze cmdlet:
Get-Service | Where-Object {$_.Status -eq 'Stopped'}
Nog een voorbeeld van het gebruik van de Where-Object-cmdlet is wanneer u een specifieke cmdlet wilt vinden. De volgende Hyper-V PowerShell-opdracht kan u helpen alle cmdlets te vinden die beginnen met Wait:
Get-Command | Where-Object {$_.Name -like '*wait*'}
De volgende Where-Object-cmdlet kan u helpen een bepaald proces te vinden op basis van alleen de naam. Door de volgende opdracht uit te voeren, kunt u een lijst krijgen van alle processen waarvan de namen beginnen met sys:
Get-Process | Where-Object {$_.ProcessName -Match "^sys.*"}
Hoe maak je een Hyper-V VM met PowerShell
Een van de krachtige ingebouwde functies van Hyper-V is het toestaan van het gebruik van PowerShell voor beheerhandelingen. Onder de vele dingen die we met PowerShell in Hyper-V kunnen doen, is het maken van virtuele machines. Laten we eens kijken naar een reeks Hyper-V PowerShell-opdrachten voor het maken van nieuwe VM’s.
PowerShell-opdrachten om een nieuwe VM te maken
Om een nieuwe Generatie 2 VM te maken met een gloednieuwe 60 GB VHDX harde schijf en deze te verbinden met een specifieke virtuele switch (in dit geval ” ExternalSwitch“), voert u de volgende PowerShell-opdrachten uit op uw Hyper-V-host.
-
VM maken:
new-vm -Name "WSTEST" -MemoryStartupBytes 2GB -Generation 2 -NewVHDPath "D:\hyper-v\virtualhard disks\WSTEST.vhdx" -NewVHDSizeBytes 60000000000 -Switchname "ExternalSwitch"
-
Om een DVD-station samen met een ISO-image toe te voegen om vanaf op te starten, kunnen we extra opdrachten uitvoeren:
Add-vmscsicontroller -vmname WSTEST
Add-vmdvddrive -vmnname WSTEST -controllernumber 1 -controllerlocation 0 -path D:\ISO\my.iso
-
Als we een vaste grootte schijf willen maken en eraan willen koppelen aan onze VM, kunnen we het volgende uitvoeren om een VHDX met een vaste grootte te maken en eraan te koppelen aan onze VM:
new-vhd -path "d:\hyper-v\virtuele harde schijven\wstest.vhdx" -sizebytes 60GB -fixed
add-vmharddiskdrive -vmname WSTEST -path "d:\hyper-v\virtuele harde schijven\wstest.vhdx"
Conclusie
PowerShell kan in het begin intimiderend lijken, maar zodra je leert ermee te werken, kun je snel ontdekken hoe je Hyper-V PowerShell-opdrachten kunt gebruiken en het beheer in je Hyper-V-omgeving kunt stroomlijnen. Houd er gewoon rekening mee dat wat je ook gebruikt om je VM’s te beheren, je back-ups moet maken om gegevensverlies en downtime te voorkomen.
NAKIVO Backup & Replication is een betrouwbare en krachtige oplossing voor gegevensbescherming, die u kan helpen VMware, Hyper-V, Nutanix, AWS EC2, Linux, Windows en Microsoft 365-omgevingen te beschermen.
Source:
https://www.nakivo.com/blog/essential-hyper-v-powershell-commands/