2013-08-15 2 views
0

저는 AD 사용자 생성을 자동화하기 위해 Powershell 스크립트를 작성하려고합니다. 우리는 혼합 된 Linux/Windows 환경이며 실수로 재사용하지 않도록 텍스트 (현재 CSV) 파일을 사용하여 이전 Linux UID # 및 사용자 이름을 추적합니다. 내 스크립트에서 파일을 구문 분석하려고하지만 비교가 작동하지 않는 것 같습니다.powershell if 문이 실행되지 않습니다.

$sam = $GivenName.substring(0,1).ToLower() + $lastname.ToLower() 
$usernames=Import-csv "uid.csv" 
ForEach($users in $usernames){ 
if($usernames.username -contains $sam){$uid = $true} 
} 

내가 파일에서 배열로 데이터를 읽을 수있는 웹 주변에서 발견 한 여러 가지 방법을 사용했지만 문제가 될 것으로 보인다 즉, 그것은 $의 UID를 설정하지 상관없이 = $ true와 나는 이유를 모른다.

편집

: 나는이에 if 문을 변경 :

if($users.username -contains $sam){$uid = $true} 

그것은했다. 도와 주셔서 감사합니다!

혼란을 해결하기 위해 $ GivenName과 $ lastname은 사용자가 입력했으며 재사용 된 사용자 이름을 피하려고하기 때문에 정확한 일치를 찾고 있습니다. 또한 -contains를 -eq로 변경하면 작동합니다. 나는 너무 오래 길을 위해 이것을 싸우고 있었고, 만약 내가 Powershell 멍청이라고 말할 수 없다면.

+0

'$에서 온 lastname'? 즉,'$ sam'의 가치가 정확하다는 확신이 있습니까? 이 부분이 다른 소스에서 파생 된 사용자 모음을 통해 반복되는 큰 스크립트 (내부 루프)의 일부입니까? – alroc

+0

username 열에 저장된 값이'$ sam' 또는 부분 일치에 정확히 일치합니까? –

+0

헤더 행을 포함하여 ** uid.csv **의 처음 몇 줄을 게시하십시오. 또한 ** $ givenname ** 및 ** $ lastname **을 어떻게 할당합니까? 관련 코드를 표시하고 데이터 소스의 예를 제공하여 사용자가 어떻게 보이는지 볼 수 있습니다. –

답변

1

$users.username을 사용하고 싶어하지만, 여기에 문제가 무엇인지 내가 생각입니다 : $ 사용자 이름 CSV 파일에서 제공하기 때문에, $ 사용자 이름 .username은 문자열입니다. - 연산자는 컬렉션과 같은 배열에 사용되며 정확히 일치하는 항목이있는 경우에만 작동합니다 (정확하게 일치하는 항목을 찾으려면 -eq을 사용해야 함). 당신이 원하는 것이 아닙니다.) 대신 - 일치을 사용하십시오. 또한 CSV의 각 레코드에 $ users을 설정하고 있으므로 $ users.username이어야합니다. 이에 if 문을 변경 :

`$ GivenName` 등을 할
if ($users.username -match $sam) { 
    $uid = $true 
} 
+0

$ usernames.username을 $ users.username으로 변경하면 해결됩니다. 주요 질문에 더 많은 의견. 감사!!! – phoenix79

1

루프에서 $users에 있지만 사용중인 루프 내에서 사용하는 루핑 변수는 $usernames입니다. 당신은 아마 그것은 정보에서 약간 불분명 당신이 제공 한 년대 if 문

+1

나는 그것을 알아 차리지도 못했지만 그래, 그것은 또한 문제의 일부분이다. 또한 ** ** - 정확히 일치하지 않는 한 **는 작동하지 않습니다. 예상 한 내용이 아닌 것으로 가정합니다. 그렇지 않으면 ** - eq **를 사용했을 것입니다. –

+0

$ usernames.username을 $ users.username으로 변경하면 해결됩니다. 주요 질문에 더 많은 의견. 감사!!! – phoenix79

관련 문제