背景


公司虚拟化主要使用的是Hyper-V, 宿主机故障、资源不足、或者系统升级时,会通过虚拟机实时迁移到其他宿主机。 对于资源不足的情况,可能就不再进行迁回到原宿主机。

在Hyper-V环境中,VM虚拟机的MAC地址通常是动态的,由宿主机分配。实时迁移到其他机器后,MAC地址并不会改变。 原宿主机后续可能会继续将该MAC地址分配给新建的VM。

这样就会导致局域网内出现相同MAC地址的情况,交换机的ARP表 就会出现两个端口,会有间歇性断网问题。

因此,想统计下所有VM的MAC地址,检查是否有冲突问题。

脚本实现

 
$computernames = "hyper-v01","hyper-v02","hyper-v03","hyper-v04"

foreach($computername in $computernames){
   $VMS = Invoke-Command -ComputerName  $computername -ScriptBlock {(Get-VM).Name}
   foreach($vm in $VMS){
       $mac = Invoke-Command -ComputerName  $computername -ScriptBlock { (Get-VMNetworkAdapter -VMName $using:vm).MacAddress}
       Add-Content -Value "$vm,$mac" -Path D:\vm-mac.csv
   }

} 

结果展示: image.png