Änderung von VM-Konfigurationen per PowerShell – Teil 1 - Hyper-V Server Blog

Ä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

image

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

SNAGHTML492e2e6

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

SNAGHTML4946c32

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

image

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

image

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

image

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

image

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

image

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

image

Nun können wir die neue externe Switch erstellen

New-VMSwitch VM -NetAdapterName VM -AllowManagementOS 0

image

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

image

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”

image

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”

image

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.

Jan Kappen
 

Jan Kappen ist ausgebildeter Fachinformatiker in der Richtung Systemintegration. Er hat seine Ausbildung im Sommer 2008 abgeschlossen und arbeitete bis August 2018 bei der Rachfahl IT-Solutions GmbH & Co. KG. Seit September 2018 arbeitet er als Senior Netzwerk- und Systemadministrator bei einem großen mittelständischen Unternehmen im schönen Sauerland. Jan Kappen ist unter anderen MCITP Server Administrator, Enterprise Administrator und Enterprise Messaging Administrator 2010 sowie MCTS für System Center Virtual Machine Manager 2008, Windows Server 2008 Active Directory, Windows Server Virtualization und Windows Server 2008 Network Infrastructure. Seit 2015 wird Jan Kappen im Bereich "File System Storage" bzw. "Cloud & Datacenter Management" für seine Expertise und seine Community-Arbeit mit dem MVP Award von Microsoft ausgezeichnet.

  • R. Cunningham sagt:

    Schön und gut, wirklich – prima Artikel…hat mir schon sehr weitergeholfen!

    Jedoch, wie kann ich die Einstellungen einer NIC mit der PowerShell ändern?

    z.B. für eine VM-LAN NIC alle Einstellungen ausschalten und nur ‚Hyper-V – erweiterbarer Switch‘ zulassen?

    Vielen Dank im Voraus für eine Antwort und ebenso vielen Dank für die bereits eingestellten Hilfen (alle Spitze – ehrlich)

    VG
    R. Cunningham

  • Jan Kappen sagt:

    Hi,
    hier müsste Set-VMSwitch oder Set-VMNetworkAdapter das Richtige sein. Eine Liste aller Befehle gibt es hier: http://technet.microsoft.com/en-us/library/hh848559.aspx
    Falls du die Bindungen der Netzwerkkarte meinst und bearbeiten möchtest dann müsste Set-NetAdapter deine Lösung sein. Alle Befehle zum Thema Netzwerk sind hier ausgeführt: http://technet.microsoft.com/en-us/library/jj134956.aspx
    Gruß, Jan

  • >