Änderung von VM-Konfigurationen per PowerShell – Teil 1
Ich stand vor kurzem wieder einmal vor der Situation, dass ich die Konfiguration einer VM anpassen musste, diese aber zwischen sechs Uhr morgens und zehn Uhr abends in Nutzung war und ich nur außerhalb dieser Zeiten an das System konnte. Die eine Möglichkeit wäre eine Änderung nach 22 Uhr zu machen, die andere wäre die Konfiguration einfach per geplantem Task und Unterstützung per PowerShell zu machen. Die geplanten Änderungen können in Ruhe vorab konfiguriert und zusammengestellt werden, per Task wird die VM dann nachts heruntergefahren, die Änderungen werden eingespielt und das System wird wieder gestartet. Da ich dies für ziemlich cool halte, schreibe ich hier mal ein paar Zeilen zu den Möglichkeiten und gebe ein paar Beispiele an.
Generell können Sie alle verfügbaren Befehle auf der folgenden TechNet-Seite einsehen:
Technet: Hyper-V Cmdlets in Windows PowerShell
In diesem Beispiel spiele ich mit einer VM mit dem Namen “Win8E14” herum, die Einstellungen zu Beginn sehen wie folgt aus
Der Shutdown
Um Änderungen an der Hardware der VM durchführen zu können, muss die VM heruntergefahren werden. Dies geht am einfachsten mit dem Befehl
Stop-VM Win8E14
Der Arbeitsspeicher
Nun kann z.B. der Arbeitsspeicher der VM ausgelesen oder verändert werden
Get-VMMemory Win8E14
Um den RAM auf 2GB zu erhöhen, kann der folgende Befehl genutzt werden
Set-VMMemory Win8E14 -StartupBytes 2048MB
Aktuell sieht die Einstellung wie folgt aus
Falls Dynamic Memory genutzt werden soll, muss dies zuerst aktiviert und danach mit Werten konfiguriert werden
Set-VMMemory Win8E14 -DynamicMemoryEnabled $true -MinimumBytes 256MB -StartupBytes 1024MB -MaximumBytes 2048MB
Dies bewirkt die folgenden Einstellungen
An den Werten für den Puffer und der Priorität hat sich nichts geändert, diese können aber ebenfalls angepasst werden
Set-VMMemory Win8E14 -DynamicMemoryEnabled $true -MinimumBytes 256MB -StartupBytes 1024MB -MaximumBytes 2048MB -Priority 75 -Buffer 30
Die Priorität wird in Prozenz angegeben, der Puffer ebenfalls. Das Ergebnis sieht wie folgt aus, beachten Sie bitte die Priorisierung => Es können nur jeweils gerade Werte angegeben werden, z.B. 70%, 80% usw
Die CPU
Da die VM in unserem Beispiel nur eine vCPU besitzt, soll dies natürlich geändert werden, damit mehr Leistung zur Verfügung steht. Auslesen der aktuellen Werte können Sie mit dem folgenden Befehl
Get-VMProcessor Win8E14
Die Ausgabe zeigt Ihnen, ob z.B. einer der beiden Kompatibilitätsmodi eingeschaltet ist. Einer der beiden ist zur Migration zwischen unterschiedlichen CPU-Typen (CompatibilityForMigrationEnabled) und der andere zur Kompatibilität für sehr alte Betriebssysteme (bisher in der GUI als Option anklickbar, Kompotibilität für ältere Betriebssysteme wie Windows NT) (CompatibilityForOlderOperatingSystemsEnabled).
Die Anzahl der vCPUs können Sie mit dem folgenden Befehl anpassen
Set-VMProcessor Win8E14 -Count 2
Dies erhöht die Anzahl der vCPUs auf 2
An den Werten der Ressourcensteuerung hat sich nichts geändert, diese können mit den folgenden Parametern geändert werden
Set-VMProcessor Win8E14 -Count 2 -Reserve 20 -Maximum 50 -RelativeWeight 130
Dies setzt die folgenden Werte
Die CPU-Kompatibilität könnte mit den folgenden Befehlen geändert werden
Set-VMProcessor Win8E14 -CompatibilityForMigrationEnabled $true
Set-VMProcessor Win8E14 –CompatibilityForOlderOperatingSystemsEnabled $true
Die virtuellen Switche
Um eine neue private virtuelle Switch zu erstellen, kann der folgende Befehl genutzt werden
New-VMSwitch VM -SwitchType Private
Dies erzeugt eine neue private Switch. Falls die Switch als Interne Switch angelegt werden soll, muss der SwitchType von “Private” auf “Internal” getauscht werden. Um eine externe Switch anzulegen, muss als erstes der Name der Netzwerkkarten herausgefunden werden. Dies funktioniert am einfachsten mit dem Befehl
Get-NetAdapter
In meinem Fall möchte ich die neue Switch auf die Karte “Ethernet” binden, diese aber vorher in “VM” umbenennen
Rename-NetAdapter -Name Ethernet -NewName VM
Nun können wir die neue externe Switch erstellen
New-VMSwitch VM -NetAdapterName VM -AllowManagementOS 0
Der Parameter –AllowManagementOS bestimmt, ob diese Switch eine “gemeinsame Verwendung” bekommt oder nicht. In meinem Fall möchte ich eine exklusive Nutzung der Karte für die VMs, daher der Wert 0. Der Default-Wert ist übrigens 1, d.h. es erfolgt eine gemeinsame Nutzung. So wie bei der Erstellung durch den Rollen-Installations-Assistenten.
Wer aufgepasst hat wird jetzt feststellen, dass ich zwei Switche mit dem Namen “VM” habe. Eine Umbenennung der Switche ist mit dem Befehl
Rename-VMSwitch „VM“ -NewName „VM-Internal“
möglich, es werden dann allerdings beide Switche umbenannt. In meinem Fall habe ich die private Switch per GUI neu benannt, eine andere Variante wäre ein Löschen und neu Anlegen gewesen.
Die Netzwerkkarten
Um sich die Netzwerkkarten einer VM anschauen zu können, kann der folgende Befehl genutzt werden, der den folgenden Output erzeugt
Get-VMNetworkAdapter Win8E14
Wie Sie sehen können, hat jede Karte hier einen Namen (der in der GUI nicht geändert werden kann). Wenn man nun eine weitere Karte hinzufügt, kann diese benannt werden
Add-VMNetworkAdapter Win8E14 –Name “Netzwerkkarte 2”
Man könnte nun seine Karten so benennen, wie man möchte und ihnen sprechende Namen geben
Add-VMNetworkAdapter Win8E14 –Name “Total Wichtig”
Add-VMNetworkAdapter Win8E14 –Name “Unwichtig”
Entfernen kann man die Karten mit den folgenden Befehlen
Remove-VMNetworkAdapter Win8E14 –Name “Total Wichtig”
Remove-VMNetworkAdapter Win8E14 –Name “Unwichtig”
Dies war der erste Teil mit einigen Befehlen, die einem das Leben manchmal etwas einfacher machen können oder die per Taskplaner zu Zeiten, an denen niemand aktiv an dem System arbeitet, Konfigurationsänderungen übernimmt.