接收位置自动处理虚假电子邮件警报

Receive Location Autohandling false email alerts

$exceptionList = Get-Content C:\Users\Dipen\Desktop\Exception_List.txt

$ReceiveLocations = Get-WmiObject MSBTS_ReceiveLocation -Namespace 'root\MicrosoftBizTalkServer' -Filter '(IsDisabled = True)' |
                    Where-Object { $exceptionList -notcontains $_.Name }

# Exit the script if there are no disabled receive locations
if ($ReceiveLocations.Count -eq 0)
{
    exit
}

示例:

$mailBodyPT = ""

$mailTextReportPT = "There are: "
[STRING]$Subject = $SubjectPrefix + $BizTalkGroup
$mailTextReportPT += "in the BizTalk group: " + $BizTalkGroup + "." 

#Send mail
foreach ($to in $EmailTo) 
{
    $Body = $HTMLmessage
    #$SMTPClient = New-Object Net.Mail.SmtpClient($PSEmailServer) 
    $message = New-Object Net.Mail.MailMessage($from, $to, $Subject, $Body)
    $message.IsBodyHtml = $true;
    $SMTPClient.Send($message)
}

问题:当所有 RL 的状态为 "disabled" 且所有这些 RL 都包含在异常列表中时,变量 $ReceiveLocations 的值应该为 false,我需要停止进一步处理我的脚本。 (如果所有RL都在例外列表中,什么也不做,直接退出)

但我仍然收到虚假电子邮件警报。如果在 $ReceiveLocations 中找不到额外的 RL,我们如何设置不接收电子邮件警报的逻辑?

当您的 Get-WmiObject 语句没有 return 结果时,变量 $ReceiveLocations 的值是 $null$null 没有 属性 Count,因此检查 $ReceiveLocations.Count -eq 0 失败并且您的脚本在发送电子邮件之前没有终止。

您可以通过多种方式避免此问题,例如通过将 $ReceiveLocations 放入 array subexpression operator:

if (@($ReceiveLocations).Count -eq 0) {
    exit
}

或者您可以使用 PowerShell 解释 values in boolean expressions 的方式(非空数组变为 $true$null 变为 $false):

if (-not $ReceiveLocations) {
    exit
}