Share via


Evacuate! script – move all VMs off cluster node using intelligent placement

Just wanted to share this script I wrote.  The idea is I want to do something (anything) to a host and feel it might cause a service interruption so I would prefer to move all VMs off the node.  Rather than doing it manually in the cluster or in VMM, or forcing VMs off in a reboot, this script will get a list of all VMs on a node and use intelligent placement to fail over VMs to the best possible node in your cluster in one quick operation.  This should work for VMs running on either Hyper-V or VMWare as long as you have SCVMM managing your environments.

    1: # ------------------------------------------------------------------------------ 
    2: # EVACUATE! 
    3: # ------------------------------------------------------------------------------ 
    4: # blogs.technet.com/offcampus 
    5: # version 1.0 
    6: # 
    7: # Description 
    8: #  Useful for quickly moving all VMs off a host using intelligent placement. 
    9: # 
   10: # ------------------------------------------------------------------------------ 
   11:  
   12: $vmhost=get-vmhost 
   13: write-host "Hosts:" -foregroundcolor "green" 
   14: foreach ($hostname in $vmhost){write-host $hostname.computername -foregroundcolor "green"} 
   15: write-host "" 
   16:  
   17: $Name = Read-Host "Which host would you like to evacuate?" 
   18:  
   19: $VMMServer = get-vmmserver -computername "v-scvmm-01.usedu.int" 
   20: $VMArray = get-vm -vmhost $Name | where {$_.customproperties -notcontains "Local"} 
   21: @( ForEach ($VM in $VMArray) { 
   22:     $VMHostRating = get-vmhostrating -vm $VM -vmhostgroup "All Hosts" -ismigration | sort -property rating -descending 
   23:     move-vm -vm $VM -vmhost $VMHostRating[0].name -RunAsynchronously 
   24: })