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

如何通过Get-ADUser命令按命名规则排除AD域指定用户

AD查询按命名规则排除指定账号实现

需求说明

查询AD活动目录用户时,需要排除符合特定命名规则的账号,待排除账号示例如下:

TST292736ca
PRD1212ca
PRD212132121ca
PRD293873
PRD122
TST141444
TST122
cyberhw12

其余符合同类规则的账号也需要统一排除,具体排除规则:

  • 用户名以TST开头且以ca结尾的账号
  • 用户名以PRD开头且以ca结尾的账号
  • 用户名以cyber开头的账号

现有已编写的基础查询脚本如下,需要在此基础上补充多条件排除逻辑实现精准过滤:

get-aduser -filter * -properties Name, PasswordNeverExpires, PasswordExpired, PasswordLastSet, EmailAddress |where {$_.Enabled -eq "True"} | where { $_.PasswordNeverExpires -eq $false } | where { $_.passwordexpired -eq $false }

实现方案

直接在原有过滤链路末尾追加字符串正则排除条件即可,使用PowerShell原生的-notmatch运算符实现规则匹配,性能优于多段独立字符串判断,修改后的完整脚本:

get-aduser -filter * -properties Name, PasswordNeverExpires, PasswordExpired, PasswordLastSet, EmailAddress |
where {$_.Enabled -eq $true} |
where { $_.PasswordNeverExpires -eq $false } |
where { $_.passwordexpired -eq $false } |
# 注:默认匹配AD用户登录名SamAccountName,若需匹配显示名称请将$_.SamAccountName替换为$_.Name
where { $_.SamAccountName -notmatch '^(TST.*ca|PRD.*ca|cyber)' }

逻辑说明

  • 正则规则^(TST.*ca|PRD.*ca|cyber)中,^代表从字符串起始位置开始匹配,.*匹配任意长度的任意字符,|代表或逻辑,只要用户名命中三条规则中的任意一条就会被过滤
  • 该规则不会误杀示例中PRD293873、PRD122、TST141444、TST122这类前缀符合但结尾不为ca的账号,完全匹配预设的过滤要求
  • 条件里的布尔值判断原来写的字符串"True"可以直接换成PowerShell布尔值$true,执行效率更高,不会出现类型转换异常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 22:27:25