【发布时间】:2017-10-01 18:09:21
【问题描述】:
这是我想要做的:我有一个带有多个集群的 vSphere 设置,在这些集群下面有一些主机。
我正在尝试编写一个脚本,遍历集群和每个集群内部,将主机置于维护模式,将其移出集群,启动/停止 VM,向其添加内存,然后将主机移回它被移出的集群。
这是我目前所拥有的。内部循环有效,但外部循环只是让所有内容运行两次,并将集群名称添加为内部循环中的$cluster。
有什么想法吗?我只想为每个集群中的所有主机运行内部循环。
我添加了-WhatIf 进行测试,您可以忽略这些。
Connect-VIServer vcenter01
$clusters = Get-Cluster
$esxhosts = Get-Cluster $clusters | Get-VMHost
$Datacenter = "Datacenter01"
$sleep = 1
& {
foreach ($cluster in $clusters) {
foreach ($esxhost in $esxhosts) {
Set-VMHost $esxhost -State Maintenance -WhatIf
Move-VMhost $esxhost -Destination $Datacenter -WhatIf
Set-VMHost $esxhost -State Connected -WhatIf
Sleep $sleep
Stop-VMGuest -Vm Z-VRA-$esxhost -Confirm:$false -WhatIf
Sleep $sleep
Set-VM -Vm Z-VRA-$esxhost -MemoryGB 6 -Confirm:$false -WhatIf
Start-VM -Vm Z-VRA-$esxhost -WhatIf
Sleep $sleep
Move-VMhost $esxhost -Destination $cluster -WhatIf
}
}
}
Disconnect-VIServer vcenter01
这是工作副本的样子(感谢@Ansgar Wiechers):
我添加了一些代码来启动/停止每个集群上的 HA 准入控制,因为它通过它工作。如果您的资源不足,这将停止 VM 在维护模式期间腾出的问题。
Connect-VIServer vcenter01
$Datacenter = "Datacenter01"
$sleep = 1
Get-Cluster | ForEach-Object {
$cluster = $_
Set-Cluster -HAAdmissionControlEnabled $false -Cluster $cluster -Confirm:$false -Whatif
$cluster | Get-VMHost | ForEach-Object {
Set-VMHost $_ -State Maintenance -WhatIf
Move-VMhost $_ -Destination $Datacenter -WhatIf
Set-VMHost $_ -State Connected -WhatIf
Sleep $sleep
Stop-VMGuest -Vm Z-VRA-$_ -Confirm:$false -WhatIf
Sleep $sleep
Set-VM -Vm Z-VRA-$_ -MemoryGB 6 -Confirm:$false -WhatIf
Start-VM -Vm Z-VRA-$_ -WhatIf
Sleep $sleep
Move-VMhost $_ -Destination $cluster -WhatIf
}
Set-Cluster -HAAdmissionControlEnabled $true -Cluster $cluster Confirm:$false -Whatif
}
Disconnect-VIServer vcenter01
【问题讨论】:
标签: powershell vmware powercli