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

Powershell对比两个对象属性,查找不在AD启用用户列表的邮箱

错误原因

你写的双层循环逻辑存在缺陷:对每个$SubscriberEmail的邮箱,都会逐个和$ADEnabledUsersEmail里的所有邮箱逐一比对,只要当前比对的AD邮箱不匹配就会输出一次该订阅邮箱。假设$ADEnabledUsersEmail里有100个对象,一个不存在于AD的订阅邮箱就会被重复输出100次,即便存在的邮箱也会输出99次重复内容,仅最后一次匹配时输出“User is active”。

修正方案

方案1:哈希集合实现(推荐,大数据量下效率更高)

先把所有AD用户的工作邮箱存入哈希集合,查找复杂度为O(1),自动去重,性能远高于遍历比对:

# 提取所有AD启用用户的工作邮箱存入哈希集合
$adEmailSet = [System.Collections.Generic.HashSet[string]]::new([string[]]$ADEnabledUsersEmail.'Work Email')

# 遍历订阅邮箱,输出不在AD集合中的邮箱
foreach ($S in $SubscriberEmail ){
    if (-not $adEmailSet.Contains($S.email)) {
        Write-Host $S.email
    }
}

方案2:简易写法(小数据量适用)

用PowerShell原生的-notin操作符实现,代码更易读:

# 提取所有AD用户的工作邮箱为数组
$adEmailList = $ADEnabledUsersEmail.'Work Email'

foreach ($S in $SubscriberEmail ){
    if ($S.email -notin $adEmailList) {
        Write-Host $S.email
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 10:09:01