2016-12-18 4 views
0
$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 
} 

Пример:Получите Место Autohandling ложные оповещения по электронной почте

Disabled_RLs

и

Exception_List

$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 включены в список исключений, значение t он переменной $ReceiveLocations должен быть ложным, и мне нужно прекратить дальнейшую обработку в моем скрипте. (ничего не делать, если все RL находятся в списке исключений, просто выйти)

Но я все еще получаю ложные оповещения по электронной почте. Как мы можем установить логику для того, чтобы не получать оповещения по электронной почте, если бы не было дополнительных RL, найденных в $ReceiveLocations?

ответ

1

Значение переменной $ReceiveLocations составляет $null, когда ваш Get-WmiObject заявление не возвращает результаты. $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 
} 
+0

Спасибо вам !!!!!! !!! –

+1

++, но стоит отметить, что унифицированная обработка скаляров и коллекций, представленных в PSv3 (methinks) _does_, позволяет использовать '.Count' в нулевом выражении и разумно возвращает' 0': '$ null.Count -eq 0 'возвращает' $ true' в PSv3 +, тогда как он возвращает '$ false' в PSv2-. – mklement0

+1

Я думал, что нет, но я просто подтвердил, и вы правы. Я бы предпочел не полагаться на это, хотя, если бы только по соображениям совместимости. –

Смежные вопросы