У меня есть сценарий PowerShell, который я использую для создания новых пользователей. Каждый год мы добавляем сотни стажеров, поэтому автоматизация имеет решающее значение. Кто-то из отдела кадров запускает сценарий, поэтому сценарий должен быть надежным.
Я столкнулся с состоянием гонки из-за двух новых функций, которые я добавил, и я хотел бы решить эту проблему более надежным способом, чем текущий метод (сон 2 минуты), который все еще периодически дает сбой.
1) Активация лицензии на Office 365. Я принудительно синхронизирую Office 365 с нашим локальным AD, используя Start-OnlineCoexistenceSync
перед попыткой активации лицензии. Насколько я могу судить, нет возможности проверить статус синхронизации. Так что задерживаю на 2 минуты. В тестах это сработало, но в производстве работает с перерывами. Я предполагаю, что увеличение времени ожидания разрешится, но 2 минуты уже кажутся долгими. И очевидно, что иногда это больше, чем нужно, я ненавижу ненужные задержки.
2) Отправка приветственного сообщения электронной почты. Создание учетных записей может занимать разное количество времени (а иногда и вовсе не работать), но я не хочу чрезмерно задерживать сценарий.
Есть предложения по решению?
В Start-OnlineCoexistenceSync
командлет должен создать событие в журнале событий (сервера каталогов) с идентификатором события 4 и источником события «Синхронизация каталога» и сказать что-то вроде «Экспорт завершен», что будет означать, что синхронизация каталогов завершена.
Итак, что вы хотите сделать, так это заставить ваш скрипт Powershell ждать появления этого события. Таким образом, вы ждете столько, сколько нужно, и не ждете больше. Конечно, вы также захотите закодировать условия ошибки, такие как максимальное время ожидания этого события, пока вы не сдадитесь, и т. Д.