2017-04-11 1 views
4

Kann mir jemand sagen, warum das -oder nicht funktioniert. Wenn ich den Code ausführe, ist die erste Ausgabe der Administrator, der true zurückgibt, aber wenn er den Kahuna-Account erreicht, gibt er immer noch false zurück und nicht true.Powershell -Oder Operator funktioniert nicht

(Get-LocalUser).Name | Out-File C:\localusers.txt 

ForEach ($User in Get-Content C:\localusers.txt) 
{ 
    If ($User -match "administrator" -or "kahuna") 
    { 
     Write-Host True 
    } 
    Else 
    { 
     Write-Host False 
    } 
} 

ich

True, False, False Falsch, Falsch

Hier sind die aufgeführten Konten erscheinen, um sie

Administrator Default, Gast , Kahuna, PCUser

+1

Erhalten Sie wirklich "Wahr, Falsch, Falsch, Falsch, Falsch"? Ich erwarte, dass es "True, True, True, True, True" wäre, da nicht leere Zeichenfolgen in '$ true' resultieren, wenn sie in' [bool] 'konvertiert werden. Also ist Ihr logischer Ausdruck äquivalent zu '($ User -match" Administrator ") -oder $ true', was immer' $ true' zurückgeben sollte. – PetSerAl

Antwort

6

Versuchen

If ($User -match "administrator" -or $User -match "kahuna") 

Ihr -or Operator zusammen nicht die Werte der vorherigen Betreiber binden. Sie müssen einen zweiten bedingten Operator nach -or angeben, glaube ich.

+0

Super danke! Ich könnte schwören, dass ich das vorher benutzt habe und es hat nicht funktioniert ... nun, es funktioniert. –

2

Nick hat Recht, stimme seine Antwort ab. Sie können auch Klammern verwenden, wenn das einfacher ist zu sehen:

If (($User -match "administrator") -or ($User -match "kahuna")) 

Die Pars impliziert und PSH sieht sie es trotzdem. Mit oder ohne die Parens würde $ User = "Administrator" zuerst auflösen:

die zu $ ​​true aufgelöst wird.