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

PowerShell并行循环无法识别AD组Members属性问题咨询

问题原因与解决方案

问题原因

ADPropertyValueCollection是Active Directory模块返回的延迟加载属性集合,它依赖于获取AD组时的原始会话上下文才能解析内容。而ForEach-Object -Parallel会将每个脚本块放在独立的子进程中执行,这些子进程无法继承父进程的AD会话上下文,导致延迟加载的Members属性无法被解析,因此没有输出。

解决方案

要解决这个问题,需要提前将延迟加载的Members属性转换为可序列化的普通数据类型(比如字符串数组),这样在并行子进程中就能正常访问:

修改获取AD组的代码

$Groups = Get-ADGroup -Filter * -Properties Created,Modified,Description,Members | 
    Select-Object -First 50, Created, Modified, Description, @{Name='Members'; Expression={[string[]]$_.Members}}

这里通过计算属性将Members转换为字符串数组,存储每个成员的DistinguishedName,这样后续并行循环中访问$psitem.Members就能正常拿到成员列表。

并行循环处理成员

修改后,你的并行循环可以正常工作,接下来就可以对每个成员的DN调用Get-ADUser:

$Groups | ForEach-Object -Parallel {
    foreach ($memberDN in $psitem.Members) {
        Get-ADUser -Identity $memberDN -Properties <需要的属性>
    }
}

额外说明

PowerShell 7的并行循环基于子进程实现,任何依赖父进程上下文的.NET对象(比如AD模块的延迟加载属性)都无法跨进程正常工作,必须将数据转换为字符串、数组、普通自定义对象等可序列化类型,才能在并行块中使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 17:20:27