嘿,我这里有这个 cmdlet:
Get-ADUser -filter {(distinguishedName -notlike "Disabled Users") -and (enabled -eq $false)} -searchBase "ou=FirstOU,dc=domain,dc=com"
我建立它是为了查找不在“禁用用户”OU 中的禁用用户。(OU 内的 OU)
但由于某种原因,它不仅返回不在“禁用用户”中的禁用用户,还返回其中的禁用用户。
为啥不起作用(distinguishedName -notlike "Disabled Users")
?
为了使我的结构清晰:
Forest
FirstOU
users,groups,etc..
Disabled Users OU
.
.
.
答案1
括号和通配符。尝试
PS C:\Users\BigHomie> Get-ADUser -SearchBase "OU=Users,dc=eng,dc=mit,dc=edu" -SearchScope Subtree -Filter {distinguishedname -notlike "*Disabled*"}
找到了正确的语法这里
答案2
过滤器作用于您尝试检索的对象类型,在本例中为用户对象。因此,您的查询将返回 dn 不是“已禁用用户”的任何已禁用用户。它将过滤器应用于用户对象,而不是 OU。
是的,当然……正如 BigHomie 正确指出的那样,用户 dn 将包含字符串“Disabled Users”。真正的问题是缺少通配符,因为用户 dn 不会完全是“Disabled Users”
尝试一下这个:
Get-ADUser -Filter {(Enabled -eq $false)} | ? { ($_.distinguishedname -notlike '*Disabled Users*') }
答案3
您的查询无效,因为DN 属性不支持 LDAP 查询中的通配符匹配(如果没有通配符, -like
/-notlike
就毫无用处)。
您只需检索所有已禁用的用户,然后从结果中过滤掉不需要的帐户:
$Disabled = Get-ADUser -Filter { useraccountcontrol -bor 2 } -SearchBase "ou=FirstOU,dc=domain,dc=com"
$Filtered = $AllDisabledUsers |Where-Object {$_.distinguishedName -notmatch "OU=Disabled Users"}
这{ useraccountcontrol -bor 2 }
相当于针对已禁用帐户的“纯” LDAP 过滤器:
(&(useraccountcontrol:1.2.840.113556.1.4.803:=2))