PowerCLI:在多个 vCenter 服务器上使用 VM
PowerCLI: Work with VMs on multiple vCenter servers
我有一个脚本可以关闭电源并永久删除所有匹配特定前缀的虚拟机。我在测试其他自动化工具时使用它,以便轻松重置实验室。该脚本连接到多个预定义的 vCenter 服务器,然后获取所有虚拟机的列表。我遇到的问题是,当我尝试关闭或删除虚拟机时,它显示 "Could not find VirtualMachine with name 'VMNAME'."
连接到 vCenter 服务器的代码:
$vcservers = @("VC1","VC2")
Connect-VIServer $vcservers
从两个 vCenter 服务器获取 VM 列表的代码:
$prefix = "TEST"
ForEach ($vc in $vcservers) {
$vms += Get-VM -Server $vc | where {$_.Name -like "$prefix*"}
}
关闭并删除每个虚拟机的代码:
ForEach ($vm in $vms) {
$vmname = $vm.name
if ($vm.PowerState -eq "PoweredOn") {
Stop-VM -VM $vmname -confirm:$false
Remove-VM -VM $vmname -DeletePermanently -confirm:$false
}
}
我已经使用 Set-PowerCLIConfiguration 在 Users 和 AllUsers 范围内设置 "Multiple" 属性,因此它应该搜索所有 vCenter 服务器,但由于某些原因它不起作用。
编辑 2017 年 1 月 25 日
更新了代码以使 $vcservers 变量保持一致。
由于第一个问题(与变量命名相关)已解决,我目前怀疑问题是由于 PowerCLI 不确定要删除的 VM 在哪个 VCenter 上运行。因此,您可以通过 vCenter 访问 VCenter 而不是尝试 运行 一次针对所有 vCenter:
$prefix = "TEST"
$vcservers = @("VC1","VC2")
ForEach ($vc in $vcservers) {
Connect-VIServer $vc
$vms += Get-VM -Server $vc | where {$_.Name -like "$prefix*"}
ForEach ($vm in $vms) {
$vmname = $vm.name
if ($vm.PowerState -eq "PoweredOn") {
Stop-VM -VM $vmname -confirm:$false
Remove-VM -VM $vmname -DeletePermanently -confirm:$false
}
Disconnect-VIServer $vc
}
我有一个脚本可以关闭电源并永久删除所有匹配特定前缀的虚拟机。我在测试其他自动化工具时使用它,以便轻松重置实验室。该脚本连接到多个预定义的 vCenter 服务器,然后获取所有虚拟机的列表。我遇到的问题是,当我尝试关闭或删除虚拟机时,它显示 "Could not find VirtualMachine with name 'VMNAME'."
连接到 vCenter 服务器的代码:
$vcservers = @("VC1","VC2")
Connect-VIServer $vcservers
从两个 vCenter 服务器获取 VM 列表的代码:
$prefix = "TEST"
ForEach ($vc in $vcservers) {
$vms += Get-VM -Server $vc | where {$_.Name -like "$prefix*"}
}
关闭并删除每个虚拟机的代码:
ForEach ($vm in $vms) {
$vmname = $vm.name
if ($vm.PowerState -eq "PoweredOn") {
Stop-VM -VM $vmname -confirm:$false
Remove-VM -VM $vmname -DeletePermanently -confirm:$false
}
}
我已经使用 Set-PowerCLIConfiguration 在 Users 和 AllUsers 范围内设置 "Multiple" 属性,因此它应该搜索所有 vCenter 服务器,但由于某些原因它不起作用。
编辑 2017 年 1 月 25 日 更新了代码以使 $vcservers 变量保持一致。
由于第一个问题(与变量命名相关)已解决,我目前怀疑问题是由于 PowerCLI 不确定要删除的 VM 在哪个 VCenter 上运行。因此,您可以通过 vCenter 访问 VCenter 而不是尝试 运行 一次针对所有 vCenter:
$prefix = "TEST"
$vcservers = @("VC1","VC2")
ForEach ($vc in $vcservers) {
Connect-VIServer $vc
$vms += Get-VM -Server $vc | where {$_.Name -like "$prefix*"}
ForEach ($vm in $vms) {
$vmname = $vm.name
if ($vm.PowerState -eq "PoweredOn") {
Stop-VM -VM $vmname -confirm:$false
Remove-VM -VM $vmname -DeletePermanently -confirm:$false
}
Disconnect-VIServer $vc
}