我正在寻找一个运行命令的脚本,读取输出,然后如果数字大于...发送电子邮件。
这是我到目前为止的代码 -
$Output = 'D:\test.data\QueuedJobss.txt'
d:
set-location -Path 'D:\program files\veritas\netbackup\bin\admincmd'
.\bpdbjobs -summary -L > $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
}
目前正在返回错误 -
}
Cannot index into a null array.
At line:6 char:81
+ $Queued = (Select-String -Pattern "Queued:\s+(\d+)" -Path $Output).Match.Groups[ <<<< 1].Value
+ CategoryInfo : InvalidOperation: (1:Int32) [], RuntimeException
+ FullyQualifiedErrorId : NullArray
它正在阅读的输出看起来像 -
Summary of jobs on ustestnbma01
Queued: 1
Waiting-to-Retry: 0
Active: 5
Successful: 25876
Partially Successful: 136
Failed: 327
Incomplete: 0
Suspended: 0
Total: 26345
我关注的行是Queued,这个数字后面跟着很多空格。
答案 0 :(得分:1)
您的代码是否在运行之前等待作业完成 - 您确定cmdlet运行时select-string
cmdlet是否有输出?也许试着用这个代替:
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
}
我怀疑cmdlet运行时数据根本不存在,因为正如你正在测试包含该数据的文件一样,正则表达式,结果成员和调用的方法都可以正常工作。
如果数据不存在,请替换为:
.\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]
答案 1 :(得分:0)
您需要使用匹配而不是匹配来修复代码行:
(Select-String -Pattern "Queued:\s+(\d+)" -Path $Output).Matches.Groups[1].Value