Вложенный ForEach l oop работает невероятно медленно - PullRequest
1 голос
/ 16 января 2020

Я написал скрипт, который предназначен для поиска в OU всех пользователей, содержащихся в whiten. Затем он получает все группы, членами которых является этот пользователь, и, если обнаружено, что DistinguishedName группы соответствует строке, он будет специально удалять этого пользователя из этой группы.

Однако он невероятно медленно перемещается куда угодно от 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

Меня беспокоит то, что этот скрипт проходит через тысячи пользователей, и в последний раз, когда я запускал его, он не смог завершить sh в течение 3 часов, и я остановил его в конце дня. в то время он сказал, что исправил около 5000 пользователей.

...