【发布时间】:2022-12-03 11:48:31
【问题描述】:
我有一个 powershell 脚本,它试图获取每个 AD 组及其成员。由于我的真实代码是对每个组中的每个用户运行 Get-ADUser,因此我使用并行循环来节省大量时间(旁注:测试后我发现使用多个 Get-ADUser 命令通常比 Get -ADGroupMember)。但是,我注意到在运行并行循环时无法查看组的成员。我写了一些基本的测试代码:
$Groups = Get-ADGroup -Filter * -Properties Created,Modified,Description,Members | select-object -first 50
# Loop A
$Groups | foreach-object {
$psitem.Members
}
# Loop B
$Groups | foreach-object -parallel {
$psitem.Members
}
对于上面的测试代码,我可以验证 $Groups 确实具有 Members 属性。他们的 gettype() 输出如下:
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True False ADPropertyValueCollection System.Collections.CollectionBase
上面的循环 A 按预期打印每个组成员,但是循环 B 始终不返回任何内容。有人知道为什么会这样吗?如果可能的话,我想使用双并行循环,只是为了节省大量时间,因为这个脚本会定期运行。
我的PS版本是7.2.7
【问题讨论】:
-
将
$PSItem.Members更改为$PSItem['Members'] -
这很奇怪...
-
@SantiagoSquarzon 似乎有效。谢谢!
标签: powershell parallel.foreach