# encoding: ascii # api: powershell # title: VMware sVmotion throttle # description: Wait function to pause a script loop until the number of sVmotions is below the specified number. For VMware, but easy to convert I would think. # version: 0.1 # type: script # author: monahancj # license: CC0 # function: Wait-mTaskvMotions # x-poshcode-id: 4880 # x-archived: 2014-02-07T23:47:55 # x-published: 2014-02-04T16:54:00 # # <# .SYNOPSIS Will enter a wait/loop if there are running vMotion or svMotion tasks. .DESCRIPTION Checks the tasks and counts the number running vMotion or svMotion tasks. If the number of active tasks is greater than the specified limit then the function sleeps and checks again. The intended is as a throttle in large (s)vMotion loops to prevent overloading the environment. Is especially useful in throttling a script while an unrelated event happens, such as putting a host or datastore into maintenance mode. .PARAMETER vMotionLimit The active tasks to test for. If the number of active tasks is less than this the function will exit. The default is 1, and must be an integer. .PARAMETER DelayMinutes How long to wait before checking the active tasks again. The default is 1, and must be an integer. .EXAMPLE Wait-mTaskvMotions -Verbose .EXAMPLE Wait-mTaskvMotions -vMotionLimit 4 .EXAMPLE Wait-mTaskvMotions -vMotionLimit 2 -DelayMinutes 3 -Verbose .NOTES Using -Verbose will output standard script started and finished messages, and how long the function will sleep before it checks the active tasks again. .LINK http://mongit201.be.monster.com/chrism/virtech/blob/master/Repo/Wait-mTaskvMotions.ps1 #> function Wait-mTaskvMotions { [CmdletBinding()] Param( [int] $vMotionLimit=1, [int] $DelayMinutes=5 ) $NumvMotionTasks = (Get-Task | ? { ($_.PercentComplete -ne 100) -and ( ($_.Description -like '*DRS*') -or ($_.Description -like '*vMotion*') )} | Measure-Object).Count While ( $NumvMotionTasks -ge $vMotionLimit ) { Write-Verbose "$(Get-Date)- Waiting $($DelayMinutes) minute(s) before checking again." Start-Sleep ($DelayMinutes * 60) $NumvMotionTasks = (Get-Task | ? { ($_.PercentComplete -ne 100) -and ( ($_.Description -like '*DRS*') -or ($_.Description -like '*vMotion*') )} | Measure-Object).Count } Write-Verbose "$(Get-Date)- Proceeding." } # end function