Have you ever reinstalled your Hyper-V hosts?
I know, there is not much need for it (as everything usually works just fine), but still… there is a “Windows Server 2016 re-installation wave” coming and maybe you’ll find the the next pieces interesting and useful.
One of the “messy” tasks with Windows reinstallation is networking… and by “messy” I mean “you have more than one network cable in your Hyper-V hosts” and you need to know which networks are connected where.
What happens is that Windows somehow always forgets your network device order, all the pretty names you’ve applied and you get stuck with names like “Ethernet”, “Ethernet 2”, etc.
There is a way to fix this (there are many, actually) – we can ask our younger colleague to go to the server room and unplug the cables one by one and then plug them back in, following the rename on our (Windows) side. This way we are certain that all the corporate, DMZ, storage, live migration, etc. cables don’t get “confused” when added to their respective teams and if we labeled cables properly, everything will work with fresh Windows installation also.
But… there is another way. We can use what we already have – our documentation. Here I mean “our current setup” – we have our network adapters and teams already configured in our current Windows installation, why don’t we just export this info and use it after the reinstallation?
We can do this easily by using PowerShell!
The idea is to export network adapter names and MAC addresses of our physical network adapters (excluding the virtual and team adapters), in a CSV file, so that we can use it later, to rename our adapters after the reinstallation:
|
Get-NetAdapter | where {$_.InterfaceDescription -notlike "Microsoft*" -and $_.InterfaceDescription -notlike "Hyper-V*"} | Export-Csv C:\Hyper-V.csv -Delimiter ";" |
After reinstallation, we can use the following command to rename our adapters, as per our saved CSV file:
|
$networks = Import-Csv C:\Hyper-V.csv -Delimiter ";" foreach($network in $networks){ Get-NetAdapter | where {$_.InterfaceDescription -notlike "Microsoft*" -and $_.InterfaceDescription -notlike "Hyper-V*" -and $_.MacAddress -eq $network.MacAddress} | Rename-NetAdapter -NewName $network.Name } |
And voilà – our networks are named nicely again (and our colleague didn’t need to go to the cold server room… this time).
Cheers!