Powershell 嵌套的ForEach循环运行速度非常慢
我编写了一个脚本,用于搜索包含whiten的所有用户的OU。然后,它将获取它找到的用户所属的所有组,如果发现组的DiscrimitedName与字符串匹配,它将从该组中删除该用户 然而,它是难以置信的慢,从5-45秒的任何地方进入。这是正常的还是有什么方法可以让我加快Powershell 嵌套的ForEach循环运行速度非常慢,powershell,active-directory,data-cleaning,Powershell,Active Directory,Data Cleaning,我编写了一个脚本,用于搜索包含whiten的所有用户的OU。然后,它将获取它找到的用户所属的所有组,如果发现组的DiscrimitedName与字符串匹配,它将从该组中删除该用户 然而,它是难以置信的慢,从5-45秒的任何地方进入。这是正常的还是有什么方法可以让我加快 $OUs = "OU=Terminated,OU=####,OU=####,DC=####,DC=####" foreach ($ou in $OUs) { $users = Get-ADUser -SearchBase
$OUs = "OU=Terminated,OU=####,OU=####,DC=####,DC=####"
foreach ($ou in $OUs)
{
$users = Get-ADUser -SearchBase $ou -Filter *
foreach ($user in $users)
{
$groups = Get-ADPrincipalGroupMembership -Identity $User | ? {$_.distinguishedName -like "*Groups_I_Want_Removed*" }
foreach($group in $groups)
{
Remove-ADPrincipalGroupMembership -Identity $user -MemberOf $group -whatif
}
}
}
$results = foreach ($OU in $OUs)
{
get-aduser -SearchBase $OU -filter * -Properties MemberOf | ? MemberOf -like "*Distribution Lists*"
}
$results | Export-Csv .\Output_of_users_remaining.csv -NoTypeInformation
我担心的是,这个脚本正在通过成千上万的用户,上次我运行它时,它无法在3小时内完成,我在一天结束时停止了它。当时,它说它已经纠正了大约5000个ish用户。使用运行空间,让内部循环并行运行。你有没有做些什么来缩小速度慢的确切部分?只需在内部循环中添加
Write Host“[$(Get Date-format'HH:mm:ss.fff')]从$group中删除$user”
,并及时检查差异即可,我可以看到条目之间平均有30秒左右的间隔,但我相信两个列表之间的相互调用也是如此。运行空间对我来说也是一个新概念。我正在研究它,但我只是对如何实现它有一个模糊的想法。管道到对象的位置
[您使用的别名?
]很慢。cmdlet速度很慢,将内容推过管道的速度很慢。您是否尝试过用$Collection.Where({your filter stuff here})
替换这些调用?使用运行空间并让内部循环并行运行您是否做过任何事情来缩小速度较慢的确切部分?只需在内部循环中添加Write Host“[$(Get Date-format'HH:mm:ss.fff')]从$group中删除$user”
,并及时检查差异即可,我可以看到条目之间平均有30秒左右的间隔,但我相信两个列表之间的相互调用也是如此。运行空间对我来说也是一个新概念。我正在研究它,但我只是对如何实现它有一个模糊的想法。管道到对象的位置
[您使用的别名?
]很慢。cmdlet速度很慢,将内容推过管道的速度很慢。您是否尝试过用$Collection.Where({your filter stuff here})
替换这些调用?