Powershell Hyper-V Script : Live Migration With Task Menu

Powershell Hyper-V Script : Live Migration With Task Menu

####################################################################################################
# MoveVMinBulk.ps1
#
# v01 September 2012 by Kévin KISOKA - Personal Website : http://www.it-deployment.fr/
#  
# Usage :
#  Menu action :
#  
#  Select options 1 or 2 to execute LVM and option 3 to abort operation , Default option is set
#  to Safely exit the script without taking any action on your running environment.
#  
#  - Only the VMs running on Cluster Node or Full Cluster are moved .
#  - The script go through Powershell Fail Over Cluster module to get VMs and migrates them to
#  another Node .
#  - Remember Network & Hardware perfomance decreases when migrating concurrently large number of VMs.
#  - To calculate how many possible concurrent live migration are possible in your environment  do:
#
#  Number of nodes\2
#
#
#
#
#####################################################################################################

 

[System.Console]::ForegroundColor = [System.ConsoleColor]::White
clear-host

 write-host
 write-host Script for Moving VMs in bulk
 write-host Usage Informations : Inputs = SourceServer,targetserver,cluster group `r -foregroundcolor:Yellow
 write-host
 write-host Please choose one of the following: -foregroundcolor:Green
 write-host
 write-host '1) Move All Started VMs on single Node to another node'
 write-host '2) Move All Started VMs on All The Cluster to another node Take care of target Hostperfomances'
 write-host '3) Exit the program'
 

$menu = Read-Host "Select an option [1-3]"
 
 write-host "Usage Informations : Inputs = SourceServer,targetserver,cluster group.`r"

-foregroundcolor:Yellow

switch ($menu)    {

1{
# Inputs

$source = read-host What is source Host NodeName
$destination = read-host What is destination Host NodeName
$cluster = read-host What is ClusterGroup Name

# import the commands from clustering module

import-module FailoverClusters

# Get all of the VMs currently hosted on the source server

$vmssorted = Get-ClusterGroup -cluster $cluster| ? {$_.OwnerNode -like $source} | ?{ $_ | Get-ClusterResource | ?{

$_.ResourceType -like "Virtual Machine" } }

# Get Current states of VMs

$vmssortedstate = $vmssorted.state

# Move all imported VMs if they are in running state

foreach ($vm in $vmssorted)
{
if ($vmssortedstate -eq "Online")

{
 write-host Number of VMs to move : ($vm).Count
 write-host Moving VMs ******************************************* -foregroundcolor:green
 Get-Cluster $cluster | Move-ClusterVirtualMachineRole -Name $vm -node $destination -Wait 30
}

Elseif ($vmssortedstate -ne "Online")

{
 Write-host Migration of All VMs Aborted ... `r -foregroundcolor:Yellow
 Move-ClusterVirtualMachineRole "$vm" -Cancel
}
}
 }

2{
# Inputs

$source = read-host What is source Host NodeName
$destination = read-host What is destination Host NodeName
$cluster = read-host What is ClusterGroup Name

# import the commands from clustering module

import-module FailoverClusters

# Get All of the VMs hosted on all cluster Group

$vmsall = Get-ClusterGroup | ?{ $_ | Get-ClusterResource | ?{ $_.ResourceType -like "Virtual Machine" } }

# Get Current states of VMs

$vmsallstate = $vmsall.state

foreach ($vm in $vmsall)
{
if ($vmsallstate -eq "Online")

{
 write-host Number of VMs to move : ($vm).Count
 write-host Moving VMs ******************************************* -foregroundcolor:green
 Get-Cluster $cluster | Move-ClusterVirtualMachineRole -Name $vm -node $destination -wait 30
}

Elseif ($vmsallstate -ne "Online")

{
 Write-host "Migration of All VMs Aborted ... `r" -foregroundcolor:Yellow
 Move-ClusterVirtualMachineRole "$vm" -Cancel
}
}
 }

3{

# Getting Out of the script

exit

 }

default{

# Getting Out of the script like option 3

Write-host Press Enter key to confirm exit -foregroundcolor:Yellow -nonewline
exit
 }
  }

Leave a Comment
  • Please add 8 and 6 and type the answer here:
  • Post
Wiki - Revision Comment List(Revision Comment)
Sort by: Published Date | Most Recent | Most Useful
Comments
  • FZB edited Original. Comment: fixed small typo in the description part of the script

Page 1 of 1 (1 items)
Wikis - Comment List
Sort by: Published Date | Most Recent | Most Useful
Posting comments is temporarily disabled until 10:00am PST on Saturday, December 14th. Thank you for your patience.
Comments
  • FZB edited Original. Comment: fixed small typo in the description part of the script

Page 1 of 1 (1 items)