Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell 嵌套的ForEach循环运行速度非常慢_Powershell_Active Directory_Data Cleaning - Fatal编程技术网

Powershell 嵌套的ForEach循环运行速度非常慢

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

我编写了一个脚本,用于搜索包含whiten的所有用户的OU。然后,它将获取它找到的用户所属的所有组,如果发现组的DiscrimitedName与字符串匹配,它将从该组中删除该用户

然而,它是难以置信的慢,从5-45秒的任何地方进入。这是正常的还是有什么方法可以让我加快

$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})
替换这些调用?