У меня есть скрипт, который запрашивает AD и обрабатывает результат:
$users=Get-ADUser -filter {...} -Properties ...
try {
foreach($user in $users) {
$obj=new-object PSObject @property {...}
[void]($arraylist.add($obj))
}
}
catch {...}
Get-ADUser
занимает около 1,5 с и возвращает более 1000 строк, а весь блок try
занимает около 0,5 с.
часть @Properties {...}
обрабатывает только поля $user
и больше не взаимодействует с AD или любым другим ресурсом. блок try
работает без ошибок.
если теперь я изменю первую строку на
$users=Get-ADUser -filter {...} -Properties ... -Server <someDC>
просто добавив параметр -Server
, команда Get-ADUser
занимает около 3 секунд, а блок try
20 + сек
Я много раз пытался убедиться, что удаленное соединение установлено без каких-либо улучшений. Я пробовал с каждым из доступных контроллеров домена и каждый раз получал одно и то же время выполнения. Если я удалю параметр -Server
, я вернусь к исходному времени выполнения.
проблема имеет сходство с описанной в этом посте , но моя проблема в коде, выполняемом после Get-ADUser
, а не в Get-ADUser
.
Что очень беспокоит, так это то, что код после замедляется.
у вас есть какие-либо подсказки?
DC: Win2008R2
Client: Win7, Powershell5.1, AD Management Tools locally installed.