Freitag, 19. Oktober 2018
Twitter Facebook Mister Wong Delicious stumbleupon digg Yahoo

Neueste Technologie für Administratoren

Systembetreuer im Windows-Umfeld brauchen Know-how über die neuesten Entwicklungen. Einsatzbeispiele und Tipps aus der Praxis führen zu mehr Effizienz im täglichen Betrieb. Wir bieten Skript-basierte Lösungen von Windows IT Pro exklusiv im deutschsprachigen Raum für unsere Abonnenten.

Zehn nützliche Hyper-V-Cmdlets

Bild 1. Zunächst gilt es die Berechtigung in der Powershell entsprechend zu setzen.

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

Bild 6. Snapshots mit benutzerdefinierten Dateinamen (etwa dem aktuellen Datum) lassen sich so erzeugen.
Bild 7. Alle vorhandene Snapshots werden angezeigt.
Bild 8. Hier sind Snapshot der drei VMs gefiltert aufgelistet
Bild 9. Was wäre wenn? Mit dem Parameter „-whatif“ testen die Systembetreuer ihre Lösch-Befehle.
Bild 10. Aber auch Informationen zum Hostsystem lassen sich in der Powershell schnell aufrufen.

Stop-VM

Um bereits laufende VM wieder zu stoppen beziehungsweise „herunterzufahren“, ersetzen die Systembetreuer einfach das Cmdlet „Start-vm“ durch „Stop-vm“. Auch dabei können gleich mehrere VMs auf einmal heruntergefahren werden (Bild 5):

Stop-vm vm-0*

Das Herunterfahren wird in diesen Fällen über das Gastbetriebssystem realisiert, quasi als würde der Benutzer auf „Herunterfahren“ klicken. Falls sich noch geöffnete Dateien oder Programme auf dem Gastsystem offen sein sollten, wartet das Betriebssystem (OS) bis zu fünf Minuten mit dem Abschluss des Vorgangs. Mit folgenden Parametern können die Systembetreuer das Herunterfahren der ausgewählten VMs erzwingen:

Stop-vm vm-01 -Force

Alternativ ist es auch möglich, der VM quasi den „virtuellen Stromstecker zu ziehen“:

Stop-Vm vm-01 -turnoff

Eine weitere Möglichkeit ist das System herunterzufahren, aber alle geöffneten Anwendungen oder Dateien in den „save state“ zu versetzen:

Stop-Vm vm-01 -save -force

Checkpoint-VM

Um Snapshot von VMs zu erzeugen, genügt die Eingabe des folgenden Powershell-Cmdlets:

Checkpoint-vm -VMName vm-01

Dies ist auch in der grafischen Oberfläche mit wenigen Klicks machbar. Ganz anders sieht die Sache aus, falls mit einem Befehl gleich Snapshots mehrerer VMs erzeugt werden soll. Denn an dieser Stelle hat die Powershell „die Nase vorn“. Beispielsweise um tägliche Snapshots aller VMs von „Vm-01“ bis „VM-09“ mit dem entsprechendem Dateinamen (nach Datum) zu erzeugen (Bild 6):

Get-vm vm-0* | checkpoint-vm -SnapshotName „Täglicher Snapshot $((Get-date).toshortdatestring())“ -asjob

Get-VMSnapshot

Falls bereits eine größere Anzahl an Snapshots für unterschiedliche VMs in der Vergangenheit angelegt wurden, ist es meist nötig diese Snapshots entsprechend zu verwalten. Auch dies können die Systembetreuer mit der Powershell elegant erledigen. Zunächst verschaffen sich die Administratoren mit „get-vmsnapshot“ einen entsprechenden Überblick über alle verfügbaren Snapshots (Bild 7):

Get-vmscnapshot *

Um nun alle Snapshots einer spezifischen VMs anzulegen, eignet sich folgendes Cmdlet:

Get-vm vm-01| get-vmsnapshot

Snapshots sind zqar nicht mit „echten“ Backups gleichzusetzen, allerdings eignen sich diese Systemschnappschüsse gut, wenn ungewollte Änderungen auf den VMs schnell rückgängig gemacht werden sollen. Beispielsweise bei Malware-Problemen (Stichwort Ransomware). Mit folgenden befehl kann auch ein spezieller Snapshot definiert werden (Bild 8):

Get-vm vm-01 | get-vmsnapshot -Name „Täglicher Snapshot*“

Remove-VMSnapshot

Falls die Hyper-V-Administratoren ältere Snapshots wieder vom System entfernen möchten, ist das Cmdlet „Remove-VMSnapshot“ zielführend:

get-vm vm-0* | Get-VMSnapshot -Name "Täglicher Snapshot 03.06.2016" | Remove-VMSnapshot

In diesem Beispiel wird die VM mit der Bezeichnung „VM-01“ per „Get-VM“ ausgewählt, an die Pipeline übergeben, der Snapshot mit der Bezeichnung „Täglicher Snapshot 03.06.2016“ ausgewählt, und dieser ohne Rückfrage gelöscht. Vorsichtshalber können die Systembetreuer an diesen „Powershell-Einzeiler“ noch den Parameter „whatif“ anhängen, um zunächst in Erfahrung zu bringen welche Auswirkungen der Befehl haben wird (Bild 9):

Get-vm vm-0* | Get-VMSnapshot -Name "Täglicher Snapshot 03.06.2016" | Remove-VMSnapshot  -whatif

Export-VM

Komplette VMs inklusive zugehöriger Snapshots sowie der VM-Konfiguration exportieren die Systembetreuer mit dem Befehl „Export-VM“. Dies könnte etwa wie folgt aussehen:

Export-VM „vm-01“  -Path X:\DASI\VM_Export  -asjob

Mit diesem Befehl exportieren die Systembetreuer die VM mit der Bezeichnung „vm-01“ in den Netzwerkordner „X:\DASI\VM_Export“. Nachdem dies einige Zeit in Anspruch nehmen kann, empfiehlt es sich diese Aufgabe im Hintergrund laufen zu lassen (durch den Parameter „-asjob“). Bei Bedarf können auch mehrerer VMs in „einem Aufmarsch“ exportiert werden:

Export-VM „vm-0*“  -Path X:\DASI\VM_Export  -asjob

Get-VMHost

Mit diesem Cmdlet können die Administratoren Informationen zum Hyper-V-Hostsystem abrufen. Mit dem Parameter „-Computername“ lassen sich auch weitere Systeme im Netzwerk abfragen, und nicht nur das lokale Hyper-V-System (Bild 10):

Get-VMhost  -Computername „SRV-2012-R2-RDP“

Get-VMNetworkAdapter

Um die IP-Adressen von VMs in Erfahrung zu bringen, greifen die systembetreuer beispielsweise auf das Cmdlet „Get-VMNetworkAdapter“ zurück. Beispielsweise um alle aktiven IPv4-Adressen der momentan aktiven VMs anzuzeigen:

Get-vm | where { $_.state -eq 'running'} | get-vmnetworkadapter | Select VMName,SwitchName,@{Name="IP";Expression={$_.IPAddresses | where {$_ -match "^168\."}}} | Sort VMName

Sollen nur die IP-Adressen einer spezifischen VM angezeigt werden, genügt der folgende Aufruf des Cmdlets:

Get-VMNetworkAdapter -VMName vm-01 | Select -expand IPAddresses

Test-VHD

Um virtuelle Festplatten-Container im Format VHD oder VHDX auf Fehler zu prüfen, eignet sich das Cmdlet „Test-VHD“. Eine Abfrage könnte dabei wie folgt aussehen:

Dir c:\VHDs | Test-VHD

Etwas detaillierter können die Systembetreuer die Ausgabe filtern und sortieren, wenn folgender Powershell-Einzeiler zum Einsatz kommt:

Dir c:\VHDs | Test-VHD | Select Name, @{n=“Test“;Expression={Test-VHD $ .fullname}} | Sort test

Zusammenfassung

Um Hyper-V-Hosts, virtuelle Maschinen und Gastsysteme zu verwalten, stehen den Systembetreuer unterschiedliche Tools zur Verfügung. Um „mal eben“ den Status einer VM zu checken eignen sich sowohl grafische Tools wie etwa der Failover-Clustermanager oder der Hyper-V-Manager. Falls es allerdings um komplexere Aufgaben geht, oder falls eine größere Anzahl an Systemen mit einbezogen werden sollen, lohnt sich ein Blick auf die Hyper-V-Cmdlets der Powershell. Denn auf diese Art exportieren die Systembetreuer beispielsweise alle VMs auf einen externen Datenträger, bringen alle (virtuellen) IP-Adressen aktiver VMs in Erfahrung oder starten sämtliche VMs „in einem Rutsch“. Dieses Vorgehen erleichtert den Administratoren die Arbeit, anfallende Jobs werden so schnell und effektiv erledigt.

Florian Huttenloher

Diesen Artikel bewerten
  
 3.88 (16 Bewertungen)
Kommentare
Anmelden
Anmelden