2014-01-10 5 views
1

Active Directory에서 활성 사용자가있는 C : \ Users의 사용자 폴더를 확인하려고합니다.사용자가 PowerShell을 사용하여 Active Directory에 있는지 확인

나는 현재 다음과 같습니다

$userProfile = Get-ChildItem -Path "C:\Users" 
$unknownList = @() 
foreach($user in $userProfile){ 
    try{ 
     Get-ADUser -Identity $user.Name | Out-Null 
    } 
    catch{ 
     $unknownList += $user.Name 
    } 
} 
Write-Host $unknownList 

내 문제는 모든 사용자 이름이 존재하지 나타나고 잡힌 것입니다. 누구든지 PowerShell 첫 번째 타이머에 대한 제안을 제공 할 수 있습니까? 나는 여기서 다른 곳에서 발견 된 많은 다른 것들을 시도했지만 아무도 일할 수 없었습니다. 고맙습니다!

+1

C '에서 폴더의 이름은 : \ Users'가 nesessarly AD에서 사용자의 이름과 일치하지 않는

여기에 코드입니다. 사용자 프로파일이 이미 존재하면'username.DomainName. ### '이 될 수 있습니다. –

+0

내가 알 수있는 한 귀하의 코드는 정확 해 보입니다. 유일한 문제는 Get-ADUser가 종료되지 않는 오류를 생성하기 때문에'Catch {}'블록에 도달하지 못할 수도 있다는 것입니다. 이 문제를 해결하려면'Get-ADUser'에'-ErrorAction Stop'을 사용하십시오. 그러면 오류가 종료 오류로 변경됩니다. –

+0

@TrevorSullivan 그의 문제는 * 모든 * 이름이 오류를 던져서'$ unknownList'에있게된다는 것입니다. –

답변

7

저는 비슷한 것을하고 싶었습니다. AD에 사용자가 있는지를 볼 수있는 유일한 방법처럼 보였습니다. Get-ADUser에서 오류가 발생하여이를 잡았습니다. 많은 연구 끝에 -Filter 매개 변수를 사용하는 경우 -Identity 매개 변수를 사용하는 대신 필터 매개 변수와 일치하는 사용자 개체 또는 -Filter 매개 변수와 일치하지 않으므로 $ Null 개체가 반환된다는 사실을 발견했습니다. . 일단 변수에이 값을 지정하면 오류를 내지 않고 "적절한"if/else 문 평가를 수행 할 수 있습니다.

$userProfile = Get-ChildItem #-Path "C:\Users" 
$unknownList = @() 
foreach($user in $userProfile){ 

    #Try getting the user 
    $ADUser = Get-ADUser -Filter {SamAccountName -eq $User.Name} 

    #Test to see if the user exists 
    If($ADUser) 
    { 
     #User Exists 
     #Write-host "$($User.Name) Exists" 
    } 
    Else 
    { 
     #User does not Exist 
     #Write-host "$($User.Name) Does not Exist" 

     Write-host "$($User.Name)" 
    } 
} 
관련 문제