PowerShell, Hyper-V: Controlling Automatic Start in Batches

In my environment, I have a lot of very large hyper-v hosts and each can contain 100+ VM's. These VM's are partly managed by another system that can turn them on and off depending on things like whether or not a client has paid their bill etc.

I need to ensure that in the event of the host rebooting, for whatever reason, the virtual machines return to the same state they were in before the reboot event, and I need to make sure that if they are powering on in large amounts, they are not causing a boot storm generally wrecking the whole system.

I need things to come on in nice predefnied controlled batches.

$VPSS = Get-VM
$StartDelay = 0 # initlal startup pause duration
$vmcount = 0

foreach ($VPS in $VPSS)

set-vm -name $VPS.Name -AutomaticStartAction StartIfRunning -AutomaticStartDelay 

$vmcount ++

if ($vmcount % 5 -eq 0) # 5 is the number of VM's the script sets before it increases the startup pause duration

    $StartDelay = $StartDelay + 30 # encreases the startup pause duration by 30 seconds