2014-01-10 3 views
1

Я пытаюсь определить, какие пользовательские папки в C: \ Users имеют активных пользователей в Active Directory.Определить, находятся ли пользователи в Active Directory с помощью PowerShell

я в настоящее время следующие:

$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

Ваш код выглядит правильно, насколько я могу судить. Единственное, что может быть проблемой, заключается в том, что ваш блок 'Catch {}' никогда не будет достигнут, потому что Get-ADUser создает ошибки, не связанные с завершением. Чтобы обойти это, используйте '-ErrorAction Stop' в' Get-ADUser'. Это изменяет ошибки на завершающие ошибки. –

+0

@TrevorSullivan Его проблема заключается в том, что * все * имена выдают ошибку и, следовательно, заканчиваются в '$ unknownList'. –

ответ

7

Я хотел сделать что-то подобное и был потрясен тем, что казалось, что единственный способ увидеть, существует ли пользователь в AD, - это заставить Bar-Get-OBUser заблуждаться, а затем поймать его. После долгих исследований я обнаружил, что вместо использования параметра -Identity, если вы используете параметр -Filter, вы фактически возвращаетесь, либо пользовательский объект (ы), который соответствует параметру фильтра, либо объект $ Null (поскольку ничто не соответствует параметру -Filter) , После того, как вы получите это в переменной, вы можете выполнить «правильную» проверку 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)" 
    } 
} 
Смежные вопросы