Используйте параметр -DontUseDefaultIncludedProperties
для командлета Get-QADUser. Сокращает данные, извлекаемые из активной директории.
Подумайте, чтобы пропустить сортировку. Кажется, это всегда замедляет работу скриптов. В любом случае, я не вижу причины сортировки в вашем скрипте.
Вместо того, чтобы "сохранять" пользователей в переменной, вы должны обрабатывать объекты напрямую (если вам больше не нужны $ users позже в скрипте).
Get-QADUser -SamAccountName [L1-L2]* -searchRoot $OuDomain -SizeLimit 0 -DontUseDefaultIncludedProperties | % {...
Объект QADUser имеет два свойства: "MemberOf" и "NestedMemberOf" . Эти свойства содержат различающееся имя групп, в которые входит пользователь (прямые и косвенные). Это строковые свойства, поэтому они обрабатываются намного быстрее, чем массив объектов, возвращаемых из командлета. Я предполагаю, что вам не понадобится NestedMemberOf, потому что вы не использовали параметр -Indirect
для командлета Get-QADMemberOf.
$result = $users | % {
$SamAccountName = $_.SamAccountName
if ($lastDomain -eq $_.dn) {
$lastDomain = ""
} else {
$lastDomain = $_.dn
}
$_.MemberOf | % {
$user = New-Object -TypeName PsObject -Property @{
"Domain" = $lastDomain
"SamAccountName" = $SamAccountName
"Group" = $_
}
$user
}
}
$result | sort-object SamAccountName | Export-CSV $FilePath