fehlerhafte Horizon Desktops neustarten
Diverse Fehler können dazu führen das ein Horizon Desktop nicht ordnungsgemäß funktioniert. Dies können z.B. Probleme innerhalb der VM beim Start gewesen sein oder kurzzeitige Probleme in der Infrastruktur. Wäre es da nicht gut wenn es einen Weg geben würde diese VMs neuzustarten? Dieses Skript kann die Arbeit erledigen und fehlerhafte Horizon Desktops neustarten. Das Skript liegt hier in zwei Versionen vor. Zuerst die Version welche ohne vCenter arbeiten kann und dann die, welche das vCenter benötigt. Doch wozu benötigt man die Funktionalität ohne vCenter? Nun, zum Beispiel wenn das vCenter aufgrund von Wartungsarbeiten nicht verfügbar ist.
Nun zu dem Skript selbst. Zuerst müssen ein paar Variablen deklariert und befüllt werden. Die Variablen sind recht selbsterklärend. Die Variable $baseStates hingegen muss eine Liste mit den entsprechenden Statis darstellen. Die gültigen Datenwerte sind in der API-Dokumentation in der Eigenschaft basicState im Datenobjekt MachineBase zu finden.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
$horizonServer = "" $horizonUsername = "" $horizonPassword = "" $esxiUsername = "" $esxiPassword = "" $baseStates = @('AGENT_UNREACHABLE', 'AGENT_ERR_DISABLED', 'AGENT_ERR_INVALID_IP', 'AGENT_ERR_NEED_REBOOT', 'AGENT_ERR_PROTOCOL_FAILURE', 'AGENT_ERR_DOMAIN_FAILURE', 'AGENT_CONFIG_ERROR') Connect-HvServer $horizonServer –User $horizonUsername –Password $horizonPassword foreach ($baseState in $baseStates) { $ProblemVMs = Get-HVMachineSummary –State $baseState foreach($ProblemVM in $ProblemVMs) { $vmhost = $ProblemVM.ManagedMachineNamesData.HostName $vm = $ProblemVM.Base.Name if($vmhost) { $vi = Connect-VIServer -Server $vmhost -user $esxiUsername -Password $esxiPassword -Force $vvm = Get-VM -Name $vm -Server $vi if($vvm.PowerState -eq "PoweredOn") { $vvm | Restart-VM -Confirm:$false -RunAsync } else { $vvm | Start-VM -Confirm:$false -RunAsync } Disconnect-VIServer -Server $vi -Force -Confirm:$false } } } Disconnect-HvServer -Confirm:$false |
Wie am Anfang erwähnt, hier nun die Version die das vCenter nutzt:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
$horizonUsername = "" $horizonPassword = "" $vCenter = "" $vcUsername = "" $vcPassword = "" $horizonServer = "" $baseStates = @('AGENT_UNREACHABLE', 'AGENT_ERR_DISABLED', 'AGENT_ERR_INVALID_IP', 'AGENT_ERR_NEED_REBOOT', 'AGENT_ERR_PROTOCOL_FAILURE', 'AGENT_ERR_DOMAIN_FAILURE', 'AGENT_CONFIG_ERROR') Connect-HvServer $horizonServer –User $horizonUsername –Password $horizonPassword $vi = Connect-VIServer -Server $vCenter -user $vcUsername -Password $vcPassword -Force foreach ($baseState in $baseStates) { $ProblemVMs = Get-HVMachineSummary –State $baseState foreach($ProblemVM in $ProblemVMs) { $vm = $ProblemVM.Base.Name $vvm = Get-VM -Name $vm -Server $vi if($vvm.PowerState -eq "PoweredOn") { $vvm | Restart-VM -Confirm:$false -RunAsync } else { $vvm | Start-VM -Confirm:$false -RunAsync } } } Disconnect-VIServer -Server $vi -Force -Confirm:$false Disconnect-HvServer -Confirm:$false |
Ich hoffe das Skript kann dem ein oder anderem Leser weiterhelfen.