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

多值过滤优化:AD用户筛选脚本失效问题及改进方案

问题分析与优化方案

原脚本问题原因

符合排除条件的用户仍被筛选出来,核心原因是类型不匹配:
AD中employeeNumber属性是字符串类型,但你脚本里写的000614这类带前导零的数值会被PowerShell自动解析为整数(比如000614会变成614),导致字符串"000614"和整数614比较时判定为不相等,所以这些用户无法被正确排除。
另外,多个-ne串联的写法冗余,维护和修改都很麻烦。

优化后的PowerShell脚本

推荐写法(服务器端过滤,效率更高)

# 定义需要排除的员工编号(必须用字符串形式,保留前导零)
$excludeList = @(
    "000614", "000864", "001195", "001200", "001201",
    "000628", "000742", "000041", "001225", "001181",
    "001074", "001203", "001198", "001208", "001224",
    "001207", "001199", "001210", "001214", "001220",
    "001212", "001213", "001221", "000036", "000589",
    "099998"
)

# 直接在AD服务器端完成过滤,减少本地数据传输
Get-ADUser -Filter {
    employeeNumber -like "*" -and  # 确保employeeNumber属性存在且非空
    enabled -eq $true -and         # 仅筛选启用状态的用户
    employeeNumber -notin $excludeList
} -Properties employeeNumber

兼容旧版AD模块的写法(客户端过滤)

如果你的AD模块版本不支持-notin语法,可改用客户端过滤:

$excludeList = @(
    "000614", "000864", "001195", "001200", "001201",
    "000628", "000742", "000041", "001225", "001181",
    "001074", "001203", "001198", "001208", "001224",
    "001207", "001199", "001210", "001214", "001220",
    "001212", "001213", "001221", "000036", "000589",
    "099998"
)

Get-ADUser -Filter { employeeNumber -like "*" -and enabled -eq $true } -Properties employeeNumber |
    Where-Object { $excludeList -notcontains $_.employeeNumber }

优化点说明

  1. 类型匹配:用字符串数组存储排除编号,完全匹配AD中employeeNumber的字符串属性,避免类型转换导致的匹配错误。
  2. 属性存在性校验:employeeNumber -like "*"比-ne $false更可靠,能准确过滤掉该属性不存在或为空的用户。
  3. 语义明确:enabled -eq $true替代enabled -ne $false,逻辑更清晰,无歧义。
  4. 简洁易维护:用数组+-notin/-notcontains替代大量-ne,修改排除列表时只需调整数组内容即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 10:07:17