$users = get-aduser -filter 'extensionAttribute10 -notlike "*" -and proxyaddresses -like "*"' -Properties extensionAttribute10,proxyaddresses,company
foreach($user in $users){
$user
}
В приведенном выше примере командлет get-aduser возвращает ~ 20000 объектов (и для запуска требуется некоторое время).Когда Get-ADUser завершен и сценарий перемещается в цикл foreach, PowerShell, похоже, снова вызывает Get-ADUser для каждого объекта в массиве, а не просто возвращает значения из переменной(и в последующем очень, очень медленно).
То же самое поведение применяется, если я ссылаюсь на объект в массиве, используя $ users [100] - в первый раз он медленно возвращает пользователя, когда делаетвызов контроллера домена, второй раз, когда я его называю, он мгновенно возвращается, когда результат кэшируется.
Это ожидаемое поведение, и есть ли способ управления им / кэширование всех результатов заранее?
PSVersion: 5.1.15063.1563
Обновление - Похоже, это происходит только при запросе объектов в лесу, удаленном от пользователя при выполнении команды:
$myForest | Get-ADUser -filter *
$myForest[0] # <-- this doesn't reach back to a DC to return the user
$remoteForest | Get-ADUser -filter * -server dc1.remoteforest.com
$remoteForest[0] # <-- this will call back to a DC to fetch the user even though it's
# been successfully retrieved in the previous line