Это должно дать вам представление о том, как запускать задания в фоновом режиме и проверять в течение 30 минут. Если в какой-то момент процессор, память или диск превысили три, отправьте электронное письмо.
function SendEmail {
param($server, $cpu, $mem, $disk)
#Code goes here to send email
}
$cpuThreshold = 99
$memThreshold = 99
$diskThreshold = 100
$jobHash = @{}
$serverHash = @{}
$serverList = @("localhost")
foreach($server in $serverList) {
$cpu = Start-Job -ComputerName $server -ScriptBlock { Get-Counter "\processor(_Total)\% Processor Time" -Continuous }
$mem = Start-Job -ComputerName $server -ScriptBlock { Get-Counter -Counter "\Processor(_Total)\% Processor Time" -Continuous }
$disk = Start-Job -ComputerName $server -ScriptBlock { Get-Counter -Counter "\LogicalDisk(C:)\% Free Space" -Continuous }
$serverHash.Add("cpu", $cpu)
$serverHash.Add("mem", $mem)
$serverHash.Add("disk", $disk)
$jobHash.Add($server, $serverHash)
}
Start-Sleep 10
$totalLoops = 0
while ($totalLoops -le 360) {
foreach($server in $jobHash.Keys) {
$cpu = (Receive-Job $jobHash[$server].cpu | % { (($_.readings.split(':'))[1]).Replace("`n","") } | measure -Maximum).Maximum
$mem = (Receive-Job $jobHash[$server].mem | % { (($_.readings.split(':'))[1]).Replace("`n","") } | measure -Maximum).Maximum
$disk = (Receive-Job $jobHash[$server].disk | % { (($_.readings.split(':'))[2]).Replace("`n","") } | measure -Maximum).Maximum
if ($Cpu -gt $cpuThreshold -or $mem -gt $memThreshold -or $disk -gt $diskThreshold) {
Send-Email $server $cpu $mem $disk
}
Write-Output "CPU: $($cpu), Mem: $($mem), disk util: $($disk)"
}
Start-Sleep 1
$totalLoops ++
}
Get-Job | Remove-Job
Надеемся, что это ответ на вопрос о том, как создавать задания в фоновом режиме для проверки состояния.
Однако я бы проверил максимальное количество заданий, которые вы можете выполнять в любой момент времени.
Документация по Get-Counter