HyperV-Netzwerkadapter per Powershell umbenennen und entfernen

Um bei einigen VMs unter HyperV einen nun überflüssigen Netzwerkadapter zu entfernen, dachte ich mir, ich könnte dies per Powershell skripten um die VM nicht im Tagesbetrieb dafür ausschalten zu müssen. Das Skript könnte dann ausgeführt werden, wenn die VM sowieso für die Sicherung heruntergefahren wird.

Der entsprechende Befehl war schnell gefunden und tut auch was er soll:

 

Allerdings gibt es ein mehr oder weniger schwerwiegendes Problem:

hyperv_netzwerkkarte_01

hyperv_netzwerkkarte_02

Kann das sein? Bekommt jede virtuelle Netzwerkkarte einer HyperV-VM den gleichen Namen? Ja, leider ist dies anscheinend standardmäßig so. Eine automatische Nummerierung wäre sehr sinnvoll gewesen, da man den Namen über die GUI auch nicht ändern kann. Wie zu erwarten ist, löscht der obige Befehl leider alle so benannten Netzwerkkarten der VM:

 

Auch der folgende Rename-Befehl benennt logischerweise alle Adapter um:

 

Wie lässt sich das Problem lösen?

Da die Adapter keine ID oder dergleichen haben, hatte ich zuerst die Idee diese anhand der MAC-Adresse zu unterscheiden. Dann habe ich aber eine noch einfachere Möglichkeit gefunden. Denn man kann das Problem leicht umgehen, indem man sich alle Adapter-Objekte einer VM, welche die „Get-VMNetworkAdapter“-Funktion zurückliefert, in einem Array speichert. Anschließend wendet man den Rename-Befehl auf nur eines der Adapter-Objekte innerhalb des Arrays an:

$adapter[0] enthält in diesem Beispiel die erste Netzwerkkarte und
$adapter[1] die zweite.

Danach sieht es auch in der GUI schon besser aus:

hyperv_netzwerkkarte_03

Im Anschluss kann man nun auch per Skript einen einzigen Netzwerkadapter löschen 🙂

Hier wurde das Problem auch so gelöst und es gibt ebenfalls eine Variante basierend auf der Unterscheidung anhand der MAC-Adresse:
https://social.technet.microsoft.com/forums/windowsserver/en-US/15faac93-0263-40db-8ecb-896ea4e210fd/rename-virtual-machine-network-adapter-with-identical-name

Schreibe einen Kommentar