我希望创建一个PowerShell脚本来搜索输出并查找一个非常好的数字并发送一封电子邮件。我目前正在使用脚本搜索文本并发送电子邮件并且正在运行。但现在我希望它能够搜索文本和一个超过的数字并发送电子邮件。
这是当前的脚本:
$Output = 'D:\test.data\QueuedJobss.txt'
d:
set-location -Path 'D:\program files\veritas\netbackup\bin\admincmd'
.\bpdbjobs -summary -L > $Output
$Queued = (Select-String -Path $Output -Pattern '(?<=Queued:\s+)\d+').Matches.Value
$MailArgs = @{
'To' = 'ab2112@test.com'
'From' = 'netbackup@test.com'
'Subject' = 'Media Server Offline!'
'Attachments' = $Output
'Body' = 'Check NBU'
'SmtpServer' = 'smtp.test.worldwide.com'
}
Send-MailMessage @MailArgs
}
但现在我想让它搜索以下输出:
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: 1
。这就是我想搜索的内容,如果大于50则发送电子邮件。此外,这个输出在排队的单词之后放了很多空格,这是一个问题吗?如果是这样,我也可以将输出读取为:
MASTER SERVER QUEUED REQUEUED ACTIVE SUCCESS PARTSUCC FAILED INCOMP SUSP ustestnbma01 1 0 4 25952 136 328 0 0
答案 0 :(得分:0)
将RegEx(捕获组)插入Select-String的模式中。
$Output = 'D:\test.data\mediastatus.txt'
set-location -Path 'D:\program files\veritas\volmgr\bin'
.\vmoprcmd.exe > $Output
$Queued = (Select-String -Pattern "Queued:\s+(\d+)" -Path $Output).Matches.Groups[1].Value
if ($Queued -gt 50 ) {
## send email
}
"Queued\s+(\d+)"
其中\s+
代表至少一个但是尽可能多的空格,(\d+)
定义包含至少一个数字的捕获组[1] - 但是尽可能多尽可能。