用于搜索文本和大于的数字的PowerShell脚本

时间:2018-05-17 20:57:54

标签: powershell

我希望创建一个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  

1 个答案:

答案 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
}
  • -Pattern "Queued\s+(\d+)"其中\s+代表至少一个但是尽可能多的空格,(\d+)定义包含至少一个数字的捕获组[1] - 但是尽可能多尽可能。