2017-04-11 1 views
4

누군가가 내게 왜 작동하지 않는지 말할 수 있습니까? 코드를 실행하면 첫 번째 출력은 true를 반환하는 관리자이지만 kahuna 계정에 도달하면 여전히 false가 아닌 false를 반환합니다.powershell 또는 운영자가 작동하지 않음

(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'가 될 것이라고 기대합니다. 왜냐하면'$ true'에서 빈 문자열 결과가 아니기 때문에'[bool]'로 변환 될 것입니다. 그래서'($ 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로 해석됩니다.

관련 문제