Huomautus
Tämän sivun käyttö edellyttää valtuutusta. Voit yrittää kirjautua sisään tai vaihtaa hakemistoa.
Tämän sivun käyttö edellyttää valtuutusta. Voit yrittää vaihtaa hakemistoa.
Interestingly enough the argument with people still happens about not wanting management tools for their system.
So I created this script as a basis which will load balance out VM's across multiple hosts using live migration
here is the code... I plan to "tweak" it a bit more to include some monitoring of core counters and trigger based on that. So essentially something like PRO in powershell! :)
For my scenario I have 480 vm's across 16 nodes running Windows 8 Datacenter With Hyper-V enabled (obviously!)
I worked out the amount of vm's per node that I require (but you could do an average calculation) and set the limits and yes I could use more variables :)
and you must have ps remoting turned on
# Created By John McCabe
# Email: johm@microsoft.com
#Twitter: mccabej
$hosts = $null
[array]$hosts += "bt001"
$hosts += "bt002"
$hosts += "bt003"
$hosts += "bt004"
$hosts += "bt005"
$hosts += "bt006"
$hosts += "bt007"
#$hosts += "bt008"
#$hosts += "bt009"
#$hosts += "bt010"
#$hosts += "bt011"
#$hosts += "bt012"
#$hosts += "bt013"
#$hosts += "bt014"
#$hosts += "bt015"
#$hosts += "bt016"
$min = 1
$destpath = "C:\VMSTORE\"
$VMPATH = "C:\VMSTORE\"
import-module hyper-v
foreach ($host1 in $hosts)
{
write-host "checking host: `t" $host1
$vms = get-vm -computername $host1
$max = $vms.count
if ($max -gt 35)
{
write-host "Host has more than 30 VMS"
while ($max -gt 35)
{
$vms = get-vm -computername $host1
$max = $vms.count
[int]$vmtomove = get-random -minimum $min -maximum $max
$vmmove = $vms[$vmtomove]
$vmname = $vmmove.name
foreach ($hst in $hosts)
{
write-host "Checking which host we can move them to"
write-host "Checking host:`t" $hst
$vmsperhost = get-vm -computername $hst
$noofvmperhost = $vmsperhost.count
if ($noofvmperhost -lt 35)
{
write-host "Moving VM to Host:`t" $hst
$servertomove = $hst
$movepath = "\\" + $hst + "\c$\vmstore\" + $vmname
$testdest = test-path $movepath
if ($testdest -eq $false)
{
mkdir $movepath
}
$finalpath = $destpath + $vmname
$session = new-pssession $host1
invoke-command -session $session -scriptblock {import-module hyper-v}
invoke-command -session $session -scriptblock {PARAM ($VM) $vmtomove = get-vm $vm} -argumentlist $vmname
invoke-command -session $session -scriptblock {param ($destserver,$fpath) move-vm -vm $vmtomove -destinationhost $destserver -destinationstoragepath $fpath} -argumentlist $hst,$finalpath
remove-pssession $session
}
}
}
}
}