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

如何获取SamAccountName为纯数字的所有AD用户?

解决AD用户筛选:获取纯数字SamAccountName的用户

嘿,我来帮你搞定这个AD用户筛选的问题!先直接说结论:你当前用的Get-AdUser -Filter "SamAccountName -like [integer]"是没法生效的——AD的LDAP筛选器根本不认识[integer]这种语法,-like只能搭配通配符(比如*),但这种写法完全达不到你要的“纯数字账号、排除含字母账号”的需求。

下面给你两种靠谱的实现方法,按需选择:

方法1:AD服务器端直接过滤(高效优先)

这种方法让AD服务器直接帮你完成筛选,不用把所有用户数据拉到本地处理,速度更快,尤其适合用户量很大的环境。我们用LDAP筛选器的正则匹配功能来实现:

$num = Get-ADUser -LDAPFilter "(samaccountname:~:=^\d+$)" -Properties postalCode, postOfficeBox, SamAccountName, Enabled

说明:

  • (samaccountname:~:=^\d+$)是LDAP扩展筛选器,~:=表示启用正则匹配,^\d+$的意思是“账号从开头到结尾全是数字(至少1位)”,完美匹配你要的纯数字账号,自动排除含字母的。
  • 注意:部分旧版本的AD服务器可能不支持这个正则匹配扩展,如果执行后没有返回结果,就换下面的方法。

方法2:本地PowerShell过滤(兼容性优先)

如果方法1不生效,这种方法绝对靠谱,兼容性拉满,不管AD版本都能用:

# 获取所有启用的AD用户,再筛选纯数字SamAccountName
$num = Get-ADUser -Filter "Enabled -eq $true" -Properties postalCode, postOfficeBox, SamAccountName, Enabled | 
       Where-Object { $_.SamAccountName -match '^\d+$' }

说明:

  • 先通过-Filter "Enabled -eq $true"获取所有启用的用户(如果需要包含禁用用户,改成-Filter *即可);
  • 再用Where-Object { $_.SamAccountName -match '^\d+$' }做本地过滤,-match '^\d+$'是PowerShell的正则匹配,确保账号全是数字,自动排除任何含有字母的账号。

如果想验证结果对不对,可以加一行输出看看:

$num | Select-Object SamAccountName, Enabled

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 09:37:38