当虚拟机规模越来越大,我们就会发现批量虚拟机的需求越来越多,例如以下场景:
- (本文实现)虚拟机网络变更,需要批量修改虚拟机连接到新的端口组上;
- 虚拟化部署,需要按照标准配置进行初始化
- 虚拟机VMTools升级策略变更
本文通过VMware PowerCLI对虚拟机的网络端口组进行批量修改,并导入例外列表(例如:NSX管理虚拟机不需要更改端口组)。
安装PowerCLI参考:离线安装VMware PowerCLI
连接vCenter Server
Connect-VIServer <VC_IP/VC_URL> -User Administrator@vsphere.local -Password <VC_PASSWORD>
(可选)创建例外虚拟机列表exclude-vm-list.csv,内容如下:
Name
VM1
VM2
VM3
执行批量修改脚本
提示:批量修改操作要谨慎,建议先在测试环境进行多次测试,再使用到生产环境。
脚本分为五个步骤:
- 准备例外列表文件,您可以通过vSphere Web Console或PowerCLI导出整体虚拟机列表,再保留需要例外的虚拟机;
- 导入例外虚拟机名到$list列表,此时虚拟机并不是真正想要操作的虚拟机,此对象会用于下一步获得需要更改的虚拟机列表;
- 通过foreach循环遍历$list列表,并使用Get-VM函数取到例外虚拟机对象,将例外虚拟机对象添加到$entry数组;
- 使用where和-ne参数判断哪些虚拟机的名字不等于$entry数组中的名字,进而取到了需要修改的虚拟机对象数组$vms;
- Get-NetworkAdapter获得虚拟机的所有网络适配器,Where查找连接网络名为“VLAN-OLD”的网络适配器,Set-NetworkAdapter函数设置为新的“VLAN-NEW”网络,Confirm:$false用于静默执行。
############################################## #Change VM Network with exclude list ############################################## # Import exclude list from exclude-vm-list.csv $list = Import-Csv "C:\exclude-vm-list.csv" # Generate array foreach ($entry in $list) {[string[]]$exclude += Get-VM -Name $entry.Name} # Get target vm list $vms = Get-Vm | where {$exclude -ne $_.Name}| Select Name # Change VM networkAdapter $vms | Get-NetworkAdapter | Where {$_.NetworkName -eq "VLAN-OLD" } | Set-NetworkAdapter -NetworkName "VLAN-NEW" -Confirm:$false
完成虚拟机端口组修改
通过这个示例我们可以发现“自动化”对与工作效率和缩短故障时间帮助非常大,后续我会继续分享更多自动化脚本,以帮助到大家提高效率。
其实,我也是只用了两天学习的PowerCLI,还是非常易学的,PowerCLI支持在Windows、Linux和Mac系统上运行,并且支持vSphere、vSAN、SRM、vRA、NSX-V、NSX-T等产品。