HyperV, PowerShell, VMNetworkadapter
Guten Abend.
Ich hänge grad an einem kleinen Problem und hoffe auf gute Ideen.
Szenario:
Auf etlichen HyperV-Hosts mit ungezählten VMs sind jeweils n HyperV-Switche angelegt, die auf allen Hosts jeweils identische Namen tragen. Jeder dieser HyperV-Switche ist an jeweils eine einzelne NIC gebunden. Nun haben die HyperV-Hosts zusätzliche NICs spendiert bekommen, es wurden NIC-Teams (LACP-Trunks) gebildet und entsprechend neue HyperV-Switche auf Basis der NIC-Teams angelegt. Bisher kommen innerhalb der VM-Konfiguration auf den HyperV-Hosts keine VLANs zum Einsatz.
Zielsetzung:
Per PowerShell soll auf allen HyperV-Hosts
- der (ein bestimmter) VMNetworkadapter innerhalb der VMs mit dem entsprechenden, neuen HyperV-Switch verbunden und
- diesem VMNetworkadapter eine VLAN-ID mitgegeben werden.
Ich dachte an einen Oneliner:
Klappt leider nur teilweise, der VMNetworkadapter wird zwar mit dem neuen Switch verbunden, das VLAN wird allerdings nicht eingetragen; Fehlermeldung gibt es keine. Jemand eine Idee, warum der letzte Befehl nicht ausgeführt wird?
Ich könnte das nun aufsplitten und
separat ausführen - dabei stoße ich auf ein anderes Problem:
Da die VMs künftig größtenteils den gleichen HyperV-Switch benutzen, aber unterschiedliche VLAN-IDs erhalten sollen, funktioniert mein Filter auf "SwitchName" natürlich nicht mehr - wenn ich mit obigem Befehl alle VMs, die vorher auf HyperV-Switch1 konfiguriert waren, auf den neuen HyperV-Switch verbinde, kann ich diesen nur für das Vergeben der ersten VLAN-ID nutzen. Sobald dann die VMs, die bisher HyperV-Switch2 genutzt haben, ebenfalls mit dem gleichen, neuen HyperV-Switch verbunden sind, würde ich die schon vergenenen VLAN-IDs überschreiben.
Drehe mich gerade im Kreis und hoffe darauf, dass jemand von euch das schon mal gemacht und einen passenden Oneliner parat hat.
Danke und einen schönen Abend.
Cheers,
jsysde
Ich hänge grad an einem kleinen Problem und hoffe auf gute Ideen.
Szenario:
Auf etlichen HyperV-Hosts mit ungezählten VMs sind jeweils n HyperV-Switche angelegt, die auf allen Hosts jeweils identische Namen tragen. Jeder dieser HyperV-Switche ist an jeweils eine einzelne NIC gebunden. Nun haben die HyperV-Hosts zusätzliche NICs spendiert bekommen, es wurden NIC-Teams (LACP-Trunks) gebildet und entsprechend neue HyperV-Switche auf Basis der NIC-Teams angelegt. Bisher kommen innerhalb der VM-Konfiguration auf den HyperV-Hosts keine VLANs zum Einsatz.
Zielsetzung:
Per PowerShell soll auf allen HyperV-Hosts
- der (ein bestimmter) VMNetworkadapter innerhalb der VMs mit dem entsprechenden, neuen HyperV-Switch verbunden und
- diesem VMNetworkadapter eine VLAN-ID mitgegeben werden.
Ich dachte an einen Oneliner:
Get-VM | Get-VMNetworkadapter | Where { $_.Switchname -like "OldSwitchName" } | Connect-VMNetworkAdapter -SwitchName "NewSwitchName" | Set-VMNetworkAdapterVlan -Access -VlanId 0815
Klappt leider nur teilweise, der VMNetworkadapter wird zwar mit dem neuen Switch verbunden, das VLAN wird allerdings nicht eingetragen; Fehlermeldung gibt es keine. Jemand eine Idee, warum der letzte Befehl nicht ausgeführt wird?
Ich könnte das nun aufsplitten und
Set-VMNetworkAdapter | Where { $_.Swichtname "NewSwitchName" } | Set-VMNetworkAdapterVlan -Access -VlanId 0815
Da die VMs künftig größtenteils den gleichen HyperV-Switch benutzen, aber unterschiedliche VLAN-IDs erhalten sollen, funktioniert mein Filter auf "SwitchName" natürlich nicht mehr - wenn ich mit obigem Befehl alle VMs, die vorher auf HyperV-Switch1 konfiguriert waren, auf den neuen HyperV-Switch verbinde, kann ich diesen nur für das Vergeben der ersten VLAN-ID nutzen. Sobald dann die VMs, die bisher HyperV-Switch2 genutzt haben, ebenfalls mit dem gleichen, neuen HyperV-Switch verbunden sind, würde ich die schon vergenenen VLAN-IDs überschreiben.
Drehe mich gerade im Kreis und hoffe darauf, dass jemand von euch das schon mal gemacht und einen passenden Oneliner parat hat.
Danke und einen schönen Abend.
Cheers,
jsysde
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 645148
Url: https://administrator.de/contentid/645148
Ausgedruckt am: 23.11.2024 um 13:11 Uhr
5 Kommentare
Neuester Kommentar
Hallo,
In Powershell gibt es keinen Einzeilerzwang. Bau doch ein Skript, das ganz herkömmlich und mehrzeilig durch alle VMs iteriert (foreach) und mittels gewöhnlichen if die Einstellungen vornimmt.
Einen Überblick zu Schleifen findest Du z.B hier: https://www.windowspro.de/script/schleifen-powershell-foreach-while-do-u ...
Dort findest Du auch den Syntax für Einzeiler:
Grüße
lcer
In Powershell gibt es keinen Einzeilerzwang. Bau doch ein Skript, das ganz herkömmlich und mehrzeilig durch alle VMs iteriert (foreach) und mittels gewöhnlichen if die Einstellungen vornimmt.
Einen Überblick zu Schleifen findest Du z.B hier: https://www.windowspro.de/script/schleifen-powershell-foreach-while-do-u ...
Dort findest Du auch den Syntax für Einzeiler:
Get-ADUser -Filter *| %{ if($_.surname) {(Get-Culture).TextInfo.ToTitleCase( $_.surname)}}
Grüße
lcer
Hallo,
Grüße
lcer
Zitat von @jsysde:
N'Abend.
Nein, ist sie nicht - wenn ich sie weglasse, werden alle NICs, die in der Konfig der jeweiligen VM angelegt sind, mit der VLAN-ID versehen und dem neuen Switch zugeordnet. Das ist aber explizit nicht gewünscht. Wäre pro VM nur eine NIC definiert, wäre das kein Problem und ich könnte die Where-Klausel tatsächlich weglassen.
OK, das macht dann Sinn.N'Abend.
Nein, ist sie nicht - wenn ich sie weglasse, werden alle NICs, die in der Konfig der jeweiligen VM angelegt sind, mit der VLAN-ID versehen und dem neuen Switch zugeordnet. Das ist aber explizit nicht gewünscht. Wäre pro VM nur eine NIC definiert, wäre das kein Problem und ich könnte die Where-Klausel tatsächlich weglassen.
Grüße
lcer