2017-04-11 7 views
4

誰かが私にその理由を教えてもらえますか?私がコードを実行すると、最初の出力はtrueを返す管理者ですが、それがkahunaアカウントに到達するとfalseを返します。私はここでpowershellまたは演算子が動作しない

、TRUE、FALSE、偽、偽、偽

を取得

(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'に変換され、 '[bool]'に変換されるからです。ですから、 '($ User -match" administrator ") - または$ true'に相当する論理式です。常に' $ true'を返さなければなりません。 – PetSerAl

答えて

6

あなた-orオペレータが一緒に前のオペレータの値を結ぶしない

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

を試してみてください。 -orの後に2番目の条件演算子を指定する必要があります。

+0

恐縮です!私は前にそれを使用したことを誓うことができたし、うまくいきませんでした...今はうまくいきます。 –

2

ニックは正しいです、彼の答えを投票してください。それが容易になっている場合にも見にブラケットを使用することができます。

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

括弧を暗示しているとPSHはとにかくそれらをそこに見ています。括弧の有無にかかわらず、$ User = "administrator"は最初に解決するでしょう:

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

これは$ trueに解決されます。

関連する問題