Zehn nützliche Hyper-V-Cmdlets

3. Juni 2018

Die meisten Verwaltungsaufgaben im Bereich Hyper-V können die Systembetreuer über den Hyper-V-Manager erledigen. Beim Einsatz von Hyper-V-Clustern müssen die Verantwortlichen statt dessen auf den „Failovercluster-Manager“ zurückgreifen. Beide Lösungen bieten zwar eine Vielzahl an Funktionen,  allerdings sind grafische Verwaltungswerkzeuge unter bestimmten Voraussetzungen nicht so effektiv zu bedienen wie Script-basierte Lösungen. Besonders wenn die Administratoren nicht nur ein oder zwei Server verwalten, sondern für eine Vielzahl an Hosts verantwortlich sind, bieten Powershell-Befehle (Cmdlets) deutliche Vorteile. Das Team von NT4ADMINS hat hierzu zehn Cmdlets für die Hyper-V-Verwaltung zusammengefasst.

Bild 2. Das Modul für den Server-Manager wird geladen.
Bild 3. Dieser Befehl bringt Informationen zu den laufenden VMs auf den Bildschirm
Bild 4. Mit dem Cmdlet „Out-GridView“ können die Systembetreuer Informationen aus der Powershell exportieren.
Bild 5. VMs starten und stoppen geht mit der Powershell schnell von der Hand.

 

Mit der Powershell können die Systembetreuer diverse Funktionen aufrufen, Konfigurationen auslesen oder Änderungen vornehmen. Es sind unterschiedliche Powershell-Versionen verfügbar. Die Version 4 ist momentan noch auf vielen Systemen verbreitet (auf Desktop-Systemen mit Windows 7 oder höher, sowie bei Server 2012 und Server 2012 R2), allerdings ist aktuell schon die Version 5.0 verfügbar (ab Windows 10 und der kommenden Betriebssystemgeneration „Windows Server 2016“). Ältere Versionen werden (meist) von den Systembetreuern nicht mehr eingesetzt.

Um die Funktionalität der Powershell zu erhöhen, können die Systembetreuer bestimmte Module zusammenstellen, importieren und die entsprechenden Funktionen ausführen. Dabei dürfen die Administratoren diese Module entweder selbst erzeugen, oder sich aus einem großen Fundus an bereits erstellten Modulen bedienen. Ob diese spezifischen Cmdlets auf einem Hyper-V-Host zur Verfügung stehen, stellen die Systembetreuer mit folgendem Powershell-Befehl fest:

Get-Command -Module Hyper-V

Falls hier keine Cmdlets aufgelistet werden, ist das entsprechende Modul nicht installiert. Falls noch nicht erfolgt, sollten die Systembetreuer zunächst die Ausführungsrichtlinie in der Powershell entsprechend auf „Unrestricted“ ändern (Bild 1):

Set-ExecutionPolicy Unrestricted

Nun empfiehlt es sich zunächst das Modul für den Servermanager zu aktivieren:

Import-Module ServerManager

Danach installieren die Systembetreuer die „Remote Server Administration Tools“ wie folgt (Bild 2):

Add-WindowsFeature RSAT-Hyper-V-Tools -IncludeAllSubFeature

Ab sofort sollten die Hyper-V-Cmdlets zur Verfügung stehen, ob dies der Fall ist, können die Administratoren nun nochmals mit dem bereits erwähnten Cmdlet in Erfahrung bringen (Get-Command -Module Hyper-V). Nun müsste eine längere Liste mit allen verfügbaren Hyper-V-Cmdlets ausgegeben werden. An dieser Stelle aktualisieren die Systembetreuer bei Bedarf noch die entsprechenden Hilfe-Dateien:

Update-Help

Nun lassen sich neue VM beispielsweise mit folgendem Cmdlet erzeugen:

New-VM -Name “Win10” -MemoryStartupBytes 1024MB -NewVHDPath C:\VM\win10_01.vhdx -NewVHDSizeBytes 100GB

Um nun bestehende VMs zu verwalten und zu konfigurieren, sind die folgenden zehn Befehle zielführend:

Get-VM

Eines der wichtigsten Cmdlets ist sicherlich der Befehl „Get-VM“. Lassen sich doch damit viele wichtige Informationen abrufen. Neben der VM-Bezeichnung, dem Status, CPU- sowie DRAM-Verbrauch wird beispielsweise auch die Betriebslaufzeit angegeben (Bild3). Wie in der Powershell üblich, handelt es sich dabei um Objekte, und somit lassen sich entsprechende Parameter und Filter einsetzten, und diese wie gewohnt mit der Pipeline verbinden:

Get-VM vm-01 | select *

Auf diese Art lassen sich einzelne VMs über die Bezeichnung selektieren. Allerdings ist es ebenso möglich, die VMs nach einem der entsprechenden Parameter zu filtern. Etwa falls die Systembetreuer nur VMs auflisten möchten, die momentan im Betrieb sind, und zusätzliche Informationen dazu in einem extra Windows-Fenster zusammenfassen möchten (Bild 4):

get-vm | where {$_.state -eq ‚running‘} | sort Uptime | select Name,Uptime,@{N=“MemoryMB“;E={$_.MemoryAssigned/1MB}},Status | Out-GridView

Start-VM

Zwar ist es auf der einen Seite wichtig, Informationen zu den VMs abzurufen, aber auf der anderen Seite möchten die Systembetreuer auch Konfigurationsänderungen an den virtuellen Maschinen vornehmen, oder diese aus- und einschalten. Mit dem passendenden Cmdlets stellt dies kein Problem dar. Folgender Befehl startet etwa die VM mit der Bezeichnung „vm-01“:

Start-vm vm-01

Mit folgenden Parameter wird der Startvorgang im Hintergrund ausgeführt. Das ist sinnvoll, wenn etwa der VM-Start (erfahrungsgemäß) länger dauern sollte, oder falls eine größere Anzahl an VMs (hier beispielsweise alle Maschinen von „vm-01“ bis „vm-03“ gestartet werden sollen:

Start-vm vm-0* -asjob

Lesen Sie auch