Skip to main content

Reconnecting ESXi servers with PowerCLI

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.

Comments

  1. # No need to repeat the following in the loop:
    $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)
    }

    ReplyDelete
  2. when running above script getting below error
    You 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

    ReplyDelete
  3. It worked for me. Thanks for the help.

    ReplyDelete
    Replies
    1. Does it help connect the hosts back to respective clusters?

      Delete

Post a Comment

Popular posts from this blog

Querying for nested folders with PowerCLI

Have you fought trying to query nested, duplicate-named folders?  Hopefully this will help solve the problem!  Suppose you have a VM folder-tree similar to this:


So, how do you get the "\dotcom\linux\dev" folder using PowerCLI?  If you query for just "dev" then you can get an array of folders.
You can parse through the array and, using the parent object, traverse the tree backwards validating the folder names.  But, what if you have 100s of folders?  In my opinion, this is not an optimal approach.  We really need to do this:

This is great case for recursion.  In my words, recursion is a "stack" of operations.  When an operation completes its result is used by the next operation in the "stack".  Most importantly there has to be base-case which causes the last operation in the stack to return a valid result.  Then each operation can be popped off the "stack" and its result can be used by the previous operation until the final result is obta…

Parsing XML with VMware Orchestrator

For my first blog I thought I would start with something easy - parsing XML using VMware Orchestrator (a.k.a vCO)!  I started playing with vCO in September 2012 for a "Cloud" project so I still consider myself a newbie - if you happen across this post and find something incorrect or something that could be done better then please don't hesitate to speak up.

Since I can't post our actual XML, I'll be using the following XML which will give the gist of how to parse for elements & attributes.

<?xml version="1.0" encoding="UTF-8" ?>
<people>
  <person firstname="Jack" lastname="Smith" age="40">
    <phone type="home" number="1234567890" />
    <phone type="cell" number="1234567891" />
<sport name="basketball" position="shooting guard" />
  </person>
  <person firstname="Jill" lastname="Smith" age=&q…