PowerShell Get-ADUser筛选语法求助:查询特定AD用户并导出CSV
问题分析与修正方案
核心错误点
- SamAccountName匹配规则错误:
-like "svc_"未使用通配符,只会匹配完全等于svc_的账户,无法覆盖所有以svc_开头的账户,需改为svc_*。 - MemberOf属性判断逻辑错误:
MemberOf存储的是组的可分辨名称(DN),而非直观的组名,直接和disconnected字符串对比永远无法匹配。MemberOf是数组类型,不能用-eq/-neq做判断,需用-contains/-notcontains检测数组是否包含目标组的DN。
- 性能冗余:先用
Get-ADUser -Filter *拉取所有AD用户再过滤,会浪费大量资源,应直接在Get-ADUser的Filter参数中先筛选符合条件的账户。
修正后的脚本步骤
1. 先获取目标组的DN
通过组名获取其可分辨名称,避免硬编码DN:
$disconnectedGroupDN = (Get-ADGroup -Filter {Name -eq "disconnected"}).DistinguishedName
2. 查询以svc_开头且属于disconnected组的用户
Get-ADUser -Filter {SamAccountName -like "svc_*"} -Properties MemberOf | Where-Object { $_.MemberOf -contains $disconnectedGroupDN }
3. 查询以svc_开头且不属于disconnected组的用户
Get-ADUser -Filter {SamAccountName -like "svc_*"} -Properties MemberOf | Where-Object { $_.MemberOf -notcontains $disconnectedGroupDN }
4. 导出结果到CSV
在上述命令后追加导出逻辑即可:
# 示例:导出不属于disconnected组的用户到指定CSV文件 Get-ADUser -Filter {SamAccountName -like "svc_*"} -Properties MemberOf | Where-Object { $_.MemberOf -notcontains $disconnectedGroupDN } | Export-Csv -Path $CSVfile -NoTypeInformation
内容的提问来源于stack exchange,提问作者Charles Waters
相关产品推荐
相关产品推荐

