2013-03-04 96 views
0

新的PowerShell,我不明白爲什麼輸出文件中的SamAccountName列是空的。而IsDisabled列具有帳戶狀態結果。Powershell輸出文件缺少SamAccountName結果

Import-Csv $filename | Foreach-Object{ 

    $user = ([ADSISEARCHER]"(samaccountname=$($_.SamAccountName))").FindOne() 

    if($user) 
    { 
     New-Object -TypeName PSObject -Property @{ 
      SamAccountName = $user.SamAccountName 
      IsDisabled = $user.GetDirectoryEntry().InvokeGet('AccountDisabled') 
     } 
    } 
    else 
    { 
      Write-Warning "Can't find user '$($_.SamAccountName)'" 
    } 
} | Export-Csv $filename 

回答

0

你必須6號線更改爲:

SamAccountName = $user.Properties.samaccountname 
+0

SamAccountName列仍爲空。 – user2132386 2013-03-04 16:09:34

+0

抱歉,我會編輯它。我錯了。 – 2013-03-04 16:15:15

+0

使用SamAccountName = $ user.Properties.samaccountname對其進行了更新,現在SamAccountName列的SystemDirectoryServices.ResultPropertyValueCollection作爲每個用戶的結果。我也試過$ user.Properties.SamAccountName,結果又是空白的。 – user2132386 2013-03-04 16:22:25

0

你需要指定sAMAccountName賦爲屬性返回之一。另外,您可以指定userAccountControl屬性並測試ADS_UF_ACCOUNTDISABLE位以查看用戶帳戶是否已禁用。這將避免綁定到每個用戶對象以測試是否禁用的開銷。這裏是一個簡短的示例腳本:

param(
    [String[]] $sAMAccountName 
) 

$ADS_UF_ACCOUNTDISABLE = 2 

$sAMAccountName | foreach-object { 
    $searcher = [ADSISearcher] "(sAMAccountName=$($_))" 
    $searcher.PropertiesToLoad.AddRange(@("samaccountname","useraccountcontrol")) 
    $result = $searcher.FindOne() 
    if ($result) { 
    $samName = $result.Properties["samaccountname"][0] 
    $disabled = ($result.Properties["useraccountcontrol"][0] -band 
     $ADS_UF_ACCOUNTDISABLE) -ne 0 
    new-object PSObject -property @{ 
     "Name" = $samName 
     "Disabled" = $disabled 
    } 
    } else { 
    write-warning "Can't find user $_" 
    } 
} 

比爾

0

IIRC這是一個已知的問題(缺陷)區分大小寫的LDAP屬性名稱。爲避免這種情況,您可以使用散列表語法,而不用擔心大小寫:

$user.Properties['SAMACCOUNTNAME']