2013-03-04 97 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']