0

powershell 新手,我不知道为什么输出文件中的 SamAccountName 列是空的。而 IsDisabled 列具有帐户状态结果。

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
4

3 回答 3

0

您必须将第 6 行更改为:

SamAccountName = $user.Properties.samaccountname
于 2013-03-04T16:02:49.987 回答
0

IIRC 这是一个已知问题(错误),具有区分大小写的 ldap 属性名称。为避免这种情况,您可以使用哈希表语法而不用担心大小写:

$user.Properties['SAMACCOUNTNAME']
于 2013-03-05T09:08:11.373 回答
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 $_"
  }
}

账单

于 2013-03-04T16:31:50.327 回答