背景
公司虚拟化主要使用的是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
}
}
结果展示: