powershell - PowerCLI:使用多个 vCenter 服务器上的虚拟机

标签 powershell vmware powercli vcenter

我有一个脚本,可以关闭并永久删除所有与特定前缀匹配的虚拟机。我在测试其他自动化工具时使用它,以便轻松重置实验室。该脚本连接到多个预定义的 vCenter 服务器,然后获取所有虚拟机的列表。我遇到的问题是,当我尝试关闭或删除虚拟机时,它显示“无法找到名为“VMNAME”的 VirtualMachine。”

连接到 vCenter 服务器的代码:

$vcservers = @("VC1","VC2")
Connect-VIServer $vcservers

从两个 vCenter 服务器获取虚拟机列表的代码:

$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 不确定要实时删除哪个 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
}

关于powershell - PowerCLI:使用多个 vCenter 服务器上的虚拟机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41644062/

相关文章:

docker - 使用 Kubernetes ConfigMaps 的应用程序配置文件

powershell - 第一次调用 msbuild 挂起

Powershell 删除引号参数

networking - 在 VMWare Fusion 中使用主机名访问客户操作系统

mysql - 从 Windows 客户机(dbforge 查询生成器)访问主机中的 mysql 数据库(mamp)

winforms - Windows窗体-摆脱等待光标

powershell - 从脚本与 cli 运行时,Powershell 命令没有输出

powershell - Powershell集变量未正确通过

powershell - 其中对象 : Cannot bind parameter 'FilterScript'