Мне удалось повторить это. Поведение меняется, когда вы указываете параметр -Server
, а когда нет.
Я использовал Process Monitor для наблюдения за сетевой активностью, и он определенно говорит с D * 1032. * при циклическом просмотре результатов, возвращаемых с использованием параметра -Server
.
Я не могу объяснить, почему, но похоже, что возвращенные объекты ADUser
не заполняются свойствами из поиска. Поэтому, когда к ним обращаются, он загружает свойства из D C. Я мог видеть это при доступе к одному конкретному элементу в массиве:
$LDAPResults1[1000]
Он отображал свойства, но я также видел сетевую активность в Process Monitor. Принимая во внимание, что я не вижу сетевой активности при доступе к одному элементу из результатов, возвращаемых, когда не используется параметр -Server
.
Так что это объясняет , что происходит , но не почему . И я действительно не знаю, почему.
Тем не менее, я понял, что если вы хотите повысить производительность во время разговора с AD, вы должны отказаться от всех «простых» способов и делать все самостоятельно. Например, используйте классы. NET DirectoryEntry
и DirectorySearcher
напрямую, что можно сделать в PowerShell с помощью «ускорителей типов» [adsi]
и [adsisearcher]
, Например, это будет делать то же самое и будет работать последовательно:
$dc = "dc.test.test.ch"
$searchBase = "ou=test,dc=test,dc=ch"
$searcher = [adsisearcher]::new([adsi]"LDAP://$dc/$searchBase", "(objectCategory=user)")
$searcher.PropertiesToLoad.Add("sAMAccountName") > $null
$searcher.PropertiesToLoad.Add("extensionAttribute13") > $null
$searcher.PageSize = 1000
$LDAPElements1=@{}
foreach ($result in $searcher.FindAll()) {
$LDAPElements1.Add($result.Properties["sAMAccountName"][0], $result.Properties["extensionAttribute13"][0])
}