2017-04-11 107 views
4

有人能告訴我爲什麼 - 或者不行。如果我運行代碼,第一個輸出是管理員,它返回true,但是當它到達kahuna帳戶時,它仍然返回false不正確。powershell -Or operator not working

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

我得到

真,假,假,假,假

這裏按順序列出賬戶出現

管理員,DefaultAccount,遊客,Kahuna,PCUser

+1

你真的會得到'真,假,假,假,假'嗎?我希望它會是'True,True,True,True,True',因爲在轉換爲'[bool]'時不會在'$ true'中出現空字符串。所以,你的邏輯表達式相當於'($ User -match「administrator」) - 或$ true',它應該總是返回'$ true'。 – PetSerAl

回答

6

嘗試

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

-or經營者不配合以前的運營商的值加在一起。我相信你需要在-or之後指定第二個條件運算符。

+0

非常感謝!我可以發誓我之前使用過它,它不工作...現在它工作。 –

2

尼克是對的,他的答案投票。您也可以使用括號,如果這是更容易地看到:

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

的括號是隱含的,PSH看到他們有反正。無論是否有這些元素,$ User =「administrator」首先會解析爲:

If (($true) -or ($false)) 

它解析爲$ true。