如何获取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
相关产品推荐
相关产品推荐

