Ваш код ожидает завершения задания перед запуском - вы уверены, что есть выход для командлета select-string
во время его выполнения? Возможно, попробуйте заменить это вместо:
If (Test-Path $Output)
{
$Queued = (Select-String -Pattern "Queued:\s+(\d+)" -Path $Output).Matches.Groups[1].Value
If ($Queued -gt 100 )
{
$MailArgs = @{
'To' = 'ab2112@test.com'
'From' = 'netbackup@test.com'
'Subject' = 'Over 100 Queued Jobs!'
'Attachments' = $Output
'Body' = 'Check Environment'
'SmtpServer' = 'smtp.us.test.com'
}
Send-MailMessage @MailArgs
}
}
Else
{
$MailArgs = @{
'To' = 'ab2112@test.com'
'From' = 'netbackup@test.com'
'Subject' = 'No output found!'
#'Attachments' = $Output
'Body' = 'Check Environment'
'SmtpServer' = 'smtp.us.test.com'
}
Send-MailMessage @MailArgs
}
Я подозреваю, что при запуске командлета данных просто нет, так как регулярное выражение, результирующие члены и вызываемые методы работают нормально, если вы проверяете файл с этими данными.
Если данных просто нет, замените это:
.\bpdbjobs -summary -L > $Output
С этим:
Start-Process -FilePath .\bpdbjobs -ArgumentList "-summary","-L","> $Output" -Wait
В качестве альтернативы, если полученные члены и методы не работают, вы можете попробовать это:
$Queued = (Select-String -Pattern "Queued:\s+(\d+)" -Path $Output).Line.Split(" ")[-1]