Get-AdUser -notLike 参数无效求助:筛选不在文本文件中的AD用户
解决Get-AdUser中-notLike参数不生效的问题
嘿,Norm,我来帮你捋清楚这个问题~
你遇到的核心问题是:用-notLike没办法正确排除文本文件里的多个用户,这是因为Get-AdUser的Filter参数里的-notLike是用来匹配单个模式的,而如果你的文本文件里有多个用户条目,直接把文件内容丢进去的话,PowerShell会把整个用户列表当成一个字符串来匹配,自然达不到你要的排除效果。
给你几个靠谱的解决方案:
方案一:用Where-Object结合-notcontains(推荐)
这种方式逻辑更清晰,先获取所有AD用户,再过滤掉排除列表里的用户:
# 1. 读取要排除的用户列表(假设文件里是用户的SamAccountName,比如"jdoe") # 顺便过滤掉文件里的空白行,避免干扰 $excludeUsers = Get-Content -Path "C:\路径\到\你的\排除文件.txt" | Where-Object { $_ -notmatch '^\s*$' } # 2. 获取所有AD用户,然后过滤掉不在排除列表中的用户 Get-AdUser -Filter * -Properties SamAccountName | Where-Object { $excludeUsers -notcontains $_.SamAccountName }
关键说明:
- 确保文本文件里的内容和你用来匹配的AD属性一致(比如用
SamAccountName就对应文件里的用户名,用DisplayName就对应全名) -notcontains是用来检查数组里是否包含某个元素,刚好适合处理多用户排除的场景
方案二:如果一定要在Get-AdUser的Filter里处理(适合少量用户)
如果你的排除用户不多,可以把每个用户的排除条件用-and连接起来,但这种方式用户多了会很繁琐:
# 比如排除user1和user2 Get-AdUser -Filter { SamAccountName -notlike "user1" -and SamAccountName -notlike "user2" }
但这种方式不适合文本文件里有大量用户的情况,还是方案一更实用。
排查小技巧:
- 先验证
$excludeUsers是否正确读取了文件内容:运行$excludeUsers看看输出是不是每个用户占一行的数组 - 检查AD用户的属性值和文件里的内容是否完全匹配(比如大小写?不过AD默认是不区分大小写的,但最好确保没有多余空格)
内容的提问来源于stack exchange,提问作者Norm Long
相关产品推荐
相关产品推荐

