You need to enable JavaScript to run this app. PowerShell中Get-ADUser使用-in、-contains操作符结果与-match不一致问题
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell中Get-ADUser使用-in、-contains操作符结果与-match不一致问题

异常原因

核心问题是 $depart 变量的存储内容和类型不符合 -in、-contains 操作符的匹配逻辑:

  • 你通过 Get-ADUser -filter "enabled -eq 'false'" -properties * | Select -Property SamAccountName 得到的是 自定义PSObject对象数组,数组的每个元素是携带SamAccountName属性的结构化对象,不是纯账号名字符串数组。
  • -in 和 -contains 属于 全等匹配操作符,会同时对比元素的类型和值:你拿字符串类型的$item和数组中的PSObject对象做对比,二者类型完全不同,所以永远返回$false,这就是结果异常的根本原因。
  • -match 操作符处理数组输入时,会先将数组的每个元素隐式转换为字符串再做正则匹配:PSObject转字符串的默认输出格式为@{SamAccountName=实际账号名},你的$item是账号名字符串,刚好能匹配到转换后字符串里的对应内容,所以能返回正确结果。
修复方案

只需要调整$depart的取值逻辑,直接提取纯账号名字符串数组即可:

# 使用Select-Object的-ExpandProperty参数直接提取属性值,得到纯字符串数组
$depart = get-aduser -filter "enabled -eq 'false'" -properties * | Select -ExpandProperty SamAccountName

也可以在判断时显式访问对象的SamAccountName属性:

# 第一种判断方式调整
if ($item -in $depart.SamAccountName) { ... }
# 第二种判断方式调整
if ($depart.SamAccountName -contains $item) { ... }

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 20:36:03