2016-08-14 2 views
0

Dies ist eine wirklich einfache Frage, die mich zieht meine Haare aus.Powershell false negative innerhalb Register-ObjectEvent

Ich habe eine if-Anweisung, die innerhalb des Aktionsblock eines Register-Object zu arbeiten weigert:

Der ganze Block sieht wie folgt aus:

$isCreated = Register-ObjectEvent $Watcher Created -SourceIdentifier CamAction -Action{ 
$name = $Event.SourceEventArgs.Name 
$changeType = $Event.SourceEventArgs.ChangeType 
$timeStamp = $Event.TimeGenerated 
$AreWeHome = gci $HomeStatus -Recurse | sort LastWriteTime -desc | select -First 1 
if ($AreWeHome -eq 'away'){ 
    Write-Host "MOTION DETECTED: '$CamFolder\$name' was $changeType at $timeStamp" 
}else{ 
    Write-Host "False Alarm:" $AreWeHome 
} 

}

Blick auf die if Anweisung:

if ($AreWeHome -eq 'away') 

Nun, wenn diese Aussage falsch ist, wird es ausgeführt:

Write-Host "False Alarm:" $AreWeHome 

Wenn ich das Powershell-Skript ausführen, ich erhalte diese Ausgabe:

False Alarm: away 

So .. $ AreWeHome tut tatsächlich enthalten ‚weg‘, die, wenn die Bedingungen nur sehen es nicht auf diese Weise .

Was zum Teufel ist das Voodoo?

+2

''weg' -eq $ AreWeHome' oder' $ AreWeHome.Name -eq 'weg'' –

+0

Wow. Vielen Dank. Ich wusste, dass es etwas Grundlegendes sein würde. Das hat es behoben! – eko

Antwort

-2

'weg' -eq $AreWeHome oder $AreWeHome.Name -eq 'away' - Mathias R.

Dies ist die Antwort von Mathias R. Jensen in dem verschachtelten Kommentar oben zur Verfügung gestellt.

+1

Bitte nimm keine weiteren Kommentare von Mitgliedern und poste sie als Antwort. – user4317867

+0

Ich kann die Antwort von Mathias nicht als eine als Kommentar verschachtelte Antwort markieren. Alles, was ich tun kann, ist, den Benutzer zu motivieren oder zu markieren. – eko

Verwandte Themen