2014-01-10 54 views
1

我試圖確定C:\ Users中的哪些用戶文件夾在Active Directory中有活動用戶。確定用戶是否在使用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匹配廣告的用戶的名稱。如果用戶配置文件已經存在,它可以是'username.DomainName。###'。 –

+0

就我所知,您的代碼看起來是正確的。唯一可能的問題是您的'Catch {}'塊可能永遠無法到達,因爲Get-ADUser會創建非終止錯誤。要解決此問題,請在'Get-ADUser'上使用'-ErrorAction Stop'。這會將錯誤更改爲終止錯誤。 –

+0

@TrevorSullivan他的問題是*所有*名稱都會拋出一個錯誤,因此最終會出現在'$ unknownList'中。 –

回答

7

我是想這樣做類似的東西,並感到震驚,它似乎是唯一的辦法,看看用戶是否存在於公元是野蠻的有GET-ADUser便有拋出一個錯誤,然後你抓住它。經過大量研究後,我發現如果使用-Filter參數(實際返回值),則不是使用-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)" 
    } 
} 
相關問題