PowerShell脚本,用于查找数字,如果大于,则发送电子邮件

PowerShell脚本,用于查找数字,如果大于,则发送电子邮件,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 -Pattern "Queued:\s+(\d+)

我正在寻找一个脚本,运行命令,读取输出,然后如果一个数字大于…发送电子邮件

这是我目前掌握的代码-

$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

我关注的行已排队,该数字后面有大量空格。

您需要使用匹配项而不是匹配项来修复代码行:

(Select-String -Pattern "Queued:\s+(\d+)" -Path $Output).Matches.Groups[1].Value

您的代码是否在运行前等待作业完成-是否确实在运行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运行时,数据根本不存在,因为如果您针对包含该数据的文件进行测试,那么regex、结果成员和调用的方法都可以正常工作

如果数据根本不存在,请替换以下内容:

.\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]

我对PowerShell不太熟悉,但根据我见过的其他正则表达式,括号似乎用于指定组。因此,由于使用了模式“
排队:\s+(\d+)
”,结果集中似乎只有一个组,对应于
\d+
。记住这一点,你应该选择
Groups[0]
,而不是
Groups[1]
。。。您的错误消息指出
数组是“空数组”。所以这比我第一次猜测的还要简单。找不到您的模式,因此不存在
。模式错误或输入字符串错误。无论哪种方式,在尝试索引到
组之前,您可能应该添加一个条件来检查
是否为空。我应该如何做?我知道模式已满足,但命令仍不起作用。根据读取的输出,模式和regex cmd看起来正常吗?如上所述,我在这里输入时使用了匹配项,只是一个输入错误。相同错误
$Queued=(选择字符串-模式“Queued:\s+(\d+)”-路径$Output)。匹配.Groups[1]。值
返回`
无法索引到空数组中。在第6行,char:83+$Queued=(选择字符串-模式“Queued:\s+(\d+)”-路径$Output)。匹配。组[@AB2112
$Queued
看起来是字符串而不是整数。
[int]$queued-gt 100
可能会出现更好的名称错误…我认为这与表达式命令有关。请考虑命令bpdbjobs的输出。是否可以尝试将输出信息保存在文本文件中,然后运行Select String cmdlet检查错误是否相同?
$Queued = (Select-String -Pattern "Queued:\s+(\d+)" -Path $Output).Line.Split(" ")[-1]