PowerCLI zu Fuß durch Cluster und hosts
Hier ist, was ich versuche zu tun: ich habe einen vSphere-setup mit mehreren Clustern, darunter solche Cluster gibt es ein paar hosts.
Ich versuche, ein Skript zu schreiben, dass Spaziergänge durch den Clustern und innerhalb jedes Clusters legt der host in den Wartungsmodus versetzt wird, bewegt er sich außerhalb des Clusters, starten/stoppen einer VM, Speicher es, dann bewegt sich der host wieder in den cluster verschoben wurde, aus.
Hier ist was ich habe, so weit. Die innere Schleife funktioniert, aber die äußere macht einfach alles zweimal ausführen und hinzufügen den Namen des Clusters als $cluster
in der inneren Schleife.
Irgendwelche Ideen? Ich möchte nur die innere Schleife ausgeführt, die für alle hosts in jedem cluster.
Fügte ich -WhatIf
für die Prüfung, können Sie ignorieren diese.
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
Hier ist das, was eine funktionierende Kopie aussieht (Dank @Ansgar Wiechers):
Fügte ich in einigen code zum starten/stoppen HA admission control auf jedem cluster-wie es funktioniert, indem es. Das wird verhindern, dass Probleme mit der VM die Räumung während der Wartung-Modus, wenn Sie sind niedrig auf resorces.
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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Diese Anweisung gibt Ihnen alle Cluster:
Diese Anweisung gibt Ihnen alle Hypervisoren aller Cluster:
Weil Ihrem inneren Schleife bereits iteriert über alle hypervisers aller Cluster, Durchlaufen die Cluster in einer äußeren Schleife wiederholt, dass die operation für jedes cluster. Für zwei Cluster erhalten Sie das Ergebnis zweimal für drei Cluster, die Sie bekommen würde, das Ergebnis von drei mal, und so weiter.
Da der Letzte Betrieb in der inneren Schleife ist nicht cluster-Agnostiker, der code könnte tatsächlich etwas kaputt, wenn Sie entfernt das Huhn wechseln. Sie müssen aufzählen, die Hypervisoren pro cluster. Ich habe keinen Zugriff auf eine vSphere-system, aber ich denke, so etwas sollte tun, was Sie wollen:
Seite Hinweis: die
& { ... }
um Ihre Schleifen ist sinnlos. Legen Sie es einfach.