LDAP用户启用的属性PowerShell

时间:2017-11-03 14:57:31

标签: powershell filter ldap

我知道您可以使用

过滤LDAP搜索

-LDAPFilter "(!userAccountControl:1.2.840.113556.1.4.803:=2)"

我想要做的是收集所有用户(启用或禁用)然后 访问一个属性,说明是否启用了此用户。

有些事情:

Find-LdapObject -PropertiesToLoad objectSid, GivenName, Enabled | % { Write-Host $_.Enabled }

问题是LDAP属性中没有启用。 Get-ADUser提供了这个属性,这就是我们使用的 今天,但成千上万的用户需要太长时间。 也许有办法访问位于其中的房产 userAccountControl的:1.2.840.113556.1.4.803:

$users = Find-LdapObject 
        -LdapConnection $domain 
        -searchFilter:("objectClass=User") 
        -searchBase $usersdn 
        -PropertiesToLoad objectSid, GivenName, Surname, SamAccountName,
                          mail, userPrincipalName, company, displayName,
                          whenCreated, title, adminCount, memberOf, userAccountControl,
                          objectClass, Mobile, Telephone, lastLogon 
        -BinaryProperties objectSid


foreach($user in $users) {

    #Extracts data from Ldap-Object
    try {
        #Does some converting
        $objectSid = (New-Object System.Security.Principal.SecurityIdentifier($user.objectSid,0)).Value
        $lastLogon = Get-Date -Date ([datetime]::FromFileTime($user.lastLogon)) -Format "yyyy-MM-dd HH:mm:ss"
        $whenCreated = [datetime]::ParseExact($user.whenCreated.Split('.')[0], 'yyyyMMddHHmmss',[CultureInfo]::InvariantCulture).ToString("yyyy-MM-dd HH:mm:ss")

        #The magic is needed here
        if($user.userAccountControl -eq "1.2.840.113556.1.4.803:=2") {
            $enabled = 0
        } else {
            $enabled = 1
        }

所有建议都表示赞赏。

1 个答案:

答案 0 :(得分:2)

  

问题是LDAP属性

中没有启用

正如您显示的LDAP过滤器所示,您需要检查userAccountControl的值是否存在位2以确定该帐户是否已被禁用 - 您可以使用-band(按位AND)运算符:

$Enabled = ($user.userAccount -band 2) -ne 2