У меня есть система, которая синхронизирует пользователей из источника данных.Источник данных состоит из информации пользователя.Когда новый пользователь синхронизируется, запускается задача PowerShell, которая создает или обновляет пользователя.Это все нормально, но когда количество новых / обновленных пользователей становится слишком большим, некоторые задачи завершаются с некоторыми интересными ошибками, такими как:
"Сервер вернул следующую ошибку: недопустимый контекст перечисления. "
или
" Соединение с каталогом, в котором обрабатывается запрос, было недоступно. Вероятно, это временное условие. "
При устранении неполадок кажется очевидным, что причиной возникновения этих ошибок является нехватка ресурсов.Это связано с тем, что все одновременно запускаемые задачи импортируют модуль в свой сеанс PS.
Итак, я попробовал разные вещи и измерил скорость Import-Module и т. Д. Итак, я пришел к выводу, что быстрее запустить Import-Module
, а затем, например, Get-ADUser
, затем просто Get-ADUser
(чтотакже импортирует модуль).
Measure-Command {Import-Module ActiveDirectory}
Среднее время 340 мс
Measure-Command {Get-ADUser -Filter *}
Среднее время 420 мс
Get-ADUser
после того, как модуль импортирован
Среднее время 10 мс
Но эти предельные различия не помогут.Так что мне пришлось смотреть дальше.Я считаю, что отключение диска может помочь ускорить процесс, поэтому я добавил следующее перед импортом модуля:
$Env:ADPS_LoadDefaultDrive = 0
Measure-Command {Import-Module ActiveDirectory}
Среднее время 85 мс
В 4 раза быстрее!Но все же ошибка сохраняется при большом количестве пользователей одновременно (например, 50 задач).Поэтому я подумал об опросе доступности в скрипте или создании цикла do..while
.Или, может быть, система, которая запускает отдельные задачи, должна быть переработана, чтобы иметь какую-то очередь.
Кто-нибудь знает эту ситуацию?Или есть какие-то мысли, которыми они хотели бы поделиться на эту тему?