Script Reboot ESXi Hosts in Cluster

Ein Script, dass das Durchstarten der ESXi Hosts in einem Cluster vereinfachen soll.

Falls es mal notwendig wird, innerhalb eines Clusters alle ESXi Hosts der Reihe nach neu zu starten, kann dir folgendes Script viel Arbeit abnehmen.

Das Script macht im Grunde folgendes:

  1. Anfrage nach Credentials und verbinden mit dem vCenter-Server.
  2. Einlesen der Clusterliste und Auswahlmenü anzeigen.
  3. Nummer eingeben, hier erfolgt keine Fehlerüberprüfung.
  4. Liste erstellen mit den zu startenden Hosts und sortieren nach Name.
  5. Server in den Wartungsmodus setzen.
  6. Server Neustart initiieren.
  7. Warten bis der Status Maintenance zu Unknow wechselt. (Hier ist eine Wartefrist zwischen den Abfragen von 15 Sekunden)
  8. Warten bi sder Stauts Unknow zu Maintenance wechselt. (Hier ist eine Wartefrist zwischen den Abfragen von 30 Sekunden)
  9. Wartungsmodus verlassen.
  10. Wartefrist 60 Sekunden für HA-Config und Beruhigung.
  11. Weiterfahren mit dem nächsten Host.
  12. Aufräumen mit den Variablen.
  13. Verbindung zu vCenter trennen.

 

Script:

$vmwarevCenter = 'FQDN vCenterServer'
Connect-VIServer -Server $vmwarevCenter | Out-Null

$i=0
Write-Host '***********************************'
Get-Cluster | Sort-Object Name | ForEach-Object {

Write-Host $i '-' $_.Name
$i++

}
Write-Host '***********************************'
Remove-Variable i

[int]$vmwareCluster = Read-Host "Enter Cluster-Number"

$vmwareHosts = Get-Cluster | Sort-Object Name | Select-Object -Index $vmwareCluster | Get-VMHost | Select-Object Name,Parent,PowerState | Where-Object {$_.PowerState -eq 'PoweredOn'} | Sort-Object Name

$i=0

$vmwareHosts | ForEach-Object {

[int]$progress = 100/($vmwareHosts.count)*$i
Write-Progress -Activity "Reboot ESXi Hosts from Cluster $vmwareCluster" -Status 'percent complete:' $progress'.' -PercentComplete $progress

Write-Host $_.Name 'enter maintenance mode.'
Set-VMHost -VMHost $_.Name -State Maintenance | Out-Null

Write-Host $_.Name 'reboot.'
Restart-VMHost $_.Name -Confirm:$false | Out-Null
While ((Get-VMHost -Name $_.Name).ConnectionState -eq 'Maintenance') {

Write-Host $_.Name 'shuting down.'
Wait-Event -Timeout 15

}

While ((Get-VMHost -Name $_.Name).ConnectionState -ne 'Maintenance') {

Write-Host $_.Name 'rebooting.'
Wait-Event -Timeout 30

}

Write-Host $_.Name 'exit maintenance mode.'
Set-VMHost -VMHost $_.Name -State Connected | Out-Null
Wait-Event -Timeout 60

$i++

}

Remove-Variable vmwarevCenter
Remove-Variable vmwareCluster
Remove-Variable vmwareHosts
Remove-Variable i
Remove-Variable progress

Disconnect-VIServer -Confirm:$false

 


Drucken