我知道您可以使用
过滤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
}
所有建议都表示赞赏。
答案 0 :(得分:2)
问题是LDAP属性
中没有启用
正如您显示的LDAP过滤器所示,您需要检查userAccountControl
的值是否存在位2
以确定该帐户是否已被禁用 - 您可以使用-band
(按位AND)运算符:
$Enabled = ($user.userAccount -band 2) -ne 2