We recently needed to re-ip our vCenter servers; each with ~200 ESXi servers which needed to be reconnected - thank goodness for PowerCLI. Since there isn't a "Reconnect-VMHost" cmdlet provided by PowerCLI we needed to check the HostSystem Object at https://www.vmware.com/support/developer/converter-sdk/conv55_apireference/vim.HostSystem.html and to see what methods were available (hint: there's a ReconnectHost_Task method which will do the trick). We can still leverage the "Get-VMHost" cmdlet to return the disconnected ESXi servers and then call the ReconnectHost_Task method to reconnect each ESXi server. The code is fairly short:
Get-VMHost -state Disconnected | foreach-object {
$vmhost = $_
$connectSpec = New-Object VMware.Vim.HostConnectSpec
$connectSpec.force = $true
$connectSpec.hostName = $vmhost.name
$connectSpec.userName = 'root'
$connectSpec.password = 'MySecretPassword'
$vmhost.extensionData.ReconnectHost_Task($connectSpec,$null)
}
Since the ReconnectHost_Task returns immediately and doesn't wait for the task to complete then you will see multiple reconnect tasks queued in vCenter. This method does return a "Task" object which you can monitor for completion (blog post coming soon on that) before spawning another reconnect task.
Get-VMHost -state Disconnected | foreach-object {
$vmhost = $_
$connectSpec = New-Object VMware.Vim.HostConnectSpec
$connectSpec.force = $true
$connectSpec.hostName = $vmhost.name
$connectSpec.userName = 'root'
$connectSpec.password = 'MySecretPassword'
$vmhost.extensionData.ReconnectHost_Task($connectSpec,$null)
}
Since the ReconnectHost_Task returns immediately and doesn't wait for the task to complete then you will see multiple reconnect tasks queued in vCenter. This method does return a "Task" object which you can monitor for completion (blog post coming soon on that) before spawning another reconnect task.
# No need to repeat the following in the loop:
ReplyDelete$connectSpec = New-Object VMware.Vim.HostConnectSpec
$connectSpec.force = $true
$connectSpec.userName = 'root'
$connectSpec.password = 'MySecretPassword'
# Loop only needs to update hostname and invoke reconnect
Get-VMHost -state Disconnected | foreach-object {
$vmhost = $_
$connectSpec.hostName = $vmhost.name
$vmhost.extensionData.ReconnectHost_Task($connectSpec,$null)
}
when running above script getting below error
ReplyDeleteYou cannot call a method on a null-valued expression.
At C:\Users\root\Documents\myrec.ps1:25 char:42
+ $vmhost.extensionData.ReconnectHost_Task <<<< ($connectSpec)
+ CategoryInfo : InvalidOperation: (ReconnectHost_Task:String) []
, RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull
It worked for me. Thanks for the help.
ReplyDeleteDoes it help connect the hosts back to respective clusters?
Delete