ここに私がやろうとしていることがあります。複数のクラスタを持つvSphereセットアップがあります。これらのクラスタの下にはいくつかのホストがあります。PowerCLIがクラスタとホストを歩く
私は、クラスタと各クラスタ内を歩き回るスクリプトを作成しようとしています。ホストをメンテナンスモードにし、クラスタ外に移動し、VMを起動/停止し、メモリを追加してから、クラスタ内に移動した。
これまで私がこれまで持っていたことは次のとおりです。内側のループは機能しますが、内側のループはすべてを2回実行し、内側のループに$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
ご協力ありがとうございます。私が間違ったことを理解しています。私はあなたが私に与えたものを試してみます。 – Nov2009