You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Get-ADUser -Filter参数异常:符合条件的AD用户查询结果为0

AD用户统计命令Filter参数问题排查

问题根源

Get-ADUser的-Filter参数采用LDAP过滤语法,而非PowerShell原生的正则/通配符规则。你写的*[0-9][0-9]在LDAP过滤逻辑中,不会被解析为“以两位数字结尾”,而是被当作字面字符匹配(即匹配包含[0-9][0-9]字符串的账号),自然无法命中目标用户。

解决方法

方法1:移至Where-Object做精确匹配(推荐)

将SamAccountName的匹配逻辑放到PowerShell的Where-Object中,用正则表达式实现“两位数字结尾”的判断,同时保留UserParameters的空值筛选:

$var1 = Get-ADUser -Filter * -SearchBase "OU=xxxxxxxxxxxxxx,DC=xxxxxxx,DC=xx" | 
        Where-Object { $_.SamAccountName -match '\d{2}$' -and $_.UserParameters -eq $null }
$var1.Count

其中\d{2}$是PowerShell正则表达式,精准匹配“以两位数字结尾”的字符串。

方法2:使用LDAP原生过滤语法(繁琐但精准)

如果必须在AD层面过滤,可通过LDAP的多OR条件枚举00-99的结尾组合:

# 构建包含00-99所有结尾的LDAP过滤规则
$ldapFilter = "(|" + (0..99 | ForEach-Object { "(SamAccountName=*$($_ -as [string].PadLeft(2,'0')))" }) + ")"
$var1 = Get-ADUser -LDAPFilter $ldapFilter -SearchBase "OU=xxxxxxxxxxxxxx,DC=xxxxxxx,DC=xx" | 
        Where-Object { $_.UserParameters -eq $null }
$var1.Count

性能优化版

若担心全量查询性能,可先用LDAP过滤缩小范围(比如筛选账号长度至少为2位),再用正则做精确匹配:

$var1 = Get-ADUser -Filter { SamAccountName -like "*??" } -SearchBase "OU=xxxxxxxxxxxxxx,DC=xxxxxxx,DC=xx" | 
        Where-Object { $_.SamAccountName -match '\d{2}$' -and $_.UserParameters -eq $null }
$var1.Count

内容的提问来源于stack exchange,提问作者cosmo_

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 14:52:14