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

PowerShell中比对两个数组:匹配$UsersGroup与$UsersActive的用户

问题解决:匹配GUID后缀的用户条目

原命令错误分析

你使用的$UsersGroup | ForEach-Object {if($_.ObjectGUID -contains $UsersActive) {$_}}存在两个核心问题:

  1. -contains用法逻辑颠倒:-contains的正确用法是集合 -contains 单个元素,你这里左侧是单个字符串($_.ObjectGUID),右侧是数组($UsersActive),语法逻辑完全错误,无法触发匹配。
  2. 未提取GUID后缀:需求是匹配ObjectGUID的最后一段后缀,但原命令直接用完整GUID去匹配整个后缀数组,逻辑不符合需求。

正确解法

方法1:直接提取后缀并匹配

通过Split('-')[-1]提取ObjectGUID的最后一段(即目标后缀),再检查该后缀是否存在于$UsersActive数组中:

$UsersGroup | Where-Object {
    # 提取GUID的最后一段作为后缀
    $guidSuffix = $_.ObjectGUID.Split('-')[-1]
    # 检查后缀是否在活跃列表中
    $UsersActive -contains $guidSuffix
}

方法2:哈希表优化(大数据量场景)

如果$UsersActive数据量较大,先将其转为哈希表可以大幅提升匹配效率:

# 将活跃后缀存入哈希表,实现O(1)快速查找
$activeSuffixMap = @{}
$UsersActive | ForEach-Object { $activeSuffixMap[$_] = $true }

$UsersGroup | Where-Object {
    $guidSuffix = $_.ObjectGUID.Split('-')[-1]
    $activeSuffixMap.ContainsKey($guidSuffix)
}

两种方法都会输出预期结果:

SamAccountName ObjectGUID
-------------- ----------
XXXX00XX       0031e949-9120-4df1-bddb-98067a141448

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 17:16:03