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 
} 

Beispiel:Erhalten Location Autohandling falsche E-Mail-Benachrichtigungen

Disabled_RLs

und

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) 
} 

Frage: wenn alle RLs haben den Status "gesperrt" und alle Diese RLs sind in der Ausnahmeliste der Wert von t enthalten Die Variable $ReceiveLocations sollte falsch sein und ich muss die weitere Verarbeitung in meinem Skript stoppen. (nichts tun, wenn alle RLs in der Ausnahmeliste gefunden werden, einfach beenden)

Aber ich bekomme immer noch falsche E-Mail-Benachrichtigungen. Wie können wir Logik einstellen, um keine E-Mail-Benachrichtigungen zu erhalten, wenn keine zusätzlichen RLs in $ReceiveLocations gefunden wurden?

Antwort

1

Der Wert der Variablen $ReceiveLocations ist $null, wenn Ihre Get-WmiObject-Anweisung keine Ergebnisse liefert. $null hat keine Eigenschaft Count, daher die Prüfung $ReceiveLocations.Count -eq 0 schlägt fehl und Ihr Skript wird nicht beendet, bevor eine E-Mail gesendet wird.

Sie können dieses Problem auf verschiedene Arten vermeiden, z. von $ReceiveLocations im array subexpression operator setzen:

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

oder man könnte die Art und Weise interpretiert Powershell values in boolean expressions verwenden (nicht-leere Arrays $true werden, $null wird $false):

if (-not $ReceiveLocations) { 
    exit 
} 
+0

Thanks you !!!!!! !!! –

+1

++, aber es ist erwähnenswert, dass die einheitliche Behandlung von Skalaren und Sammlungen in PSv3 eingeführt (Methinks) _does_ ermöglicht die Verwendung von ".Count" auf einen nullwertigen Ausdruck und gibt sinnvollerweise 0: $ null.Count -eq 0 'gibt' $ true' in PSv3 + zurück, während es '$ false' in PSv2- zurückgibt. – mklement0

+1

Ich dachte es nicht, aber ich habe es gerade verifiziert und du hast Recht. Ich würde es wahrscheinlich immer noch vorziehen, mich nicht darauf zu verlassen, wenn auch nur aus Gründen der Kompatibilität. –