接收位置自动处理虚假电子邮件警报
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
}
$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
}