2016-04-28 6 views
0

Я создал сценарий PowerShell, который отлично работает в большинстве случаев. Сначала скрипт создает учетную запись пользователя. Сразу после этого (после того, как «чтение-хост» требует пользователя для ввода почтового ящика), он создает почтовый ящик. По завершении этого действия в почтовый ящик применяются некоторые (вне офиса).Powershell, создал пользователя, хотел создать почтовый ящик, но не может найти пользователя в AD

По какой-то причине это выглядит так, что скрипт слишком быстр. Довольно часто он заканчивается неудачей, говоря, что пользователь не может быть найден. Это происходит сразу после части создания почтового ящика, когда я хочу применить некоторые настройки. Если я жду несколько минут между созданием пользователя и создание почтового ящика части, дела идут хорошо.

Код

# code here that creates user account. 
# read-host "does user need to have a mailbox"? 

Enable-Mailbox -identity $sam -database $maildb 

# here I get Enable-Mailbox outputs - Name, Alias etc 

Get-Mailbox -identity $sam | Set-Mailbox -ExternalOOFOptions InternalOnly 

Часто я получаю ошибку:

Error: Couldn't find object in OU

Я просто хочу сценарий, чтобы создать все без меня ждать. Есть ли способ, которым я могу это сделать?

Я запускаю сценарий с рабочей станции и импортирую активный каталог и обмениваюсь модулями PowerShell.

+0

Какие команды вы используете в сценарии? Может быть, лучше использовать командлет 'New-Mailbox'. См. [Здесь] (https://technet.microsoft.com/en-us/library/aa997663%28v=exchg.160%29.aspx). Просто добавьте некоторую логику, чтобы отложить создание учетной записи пользователя и почтового ящика до тех пор, пока они не ответят, если у учетной записи должен быть почтовый ящик. Если это так, создайте его с помощью команды «New-Mailbox», иначе используйте другой метод. – ChadSikorra

+0

Привет, ChadSikorra, спасибо, что ответили! После того, как пользователь создан, я использую: Enable-Mailbox -identity $ sam -database $ maildb Сценарий дает мне некоторый результат, например Name, Alias ​​и т. Д. Таким образом, почтовый ящик был создан. После этого следующая команда: Get-Mailbox -identity $ sam | Set-Mailbox -ExternalOOFOptions InternalOnly Это то место, где в большинстве случаев я получаю такую ​​ошибку, как: Ошибка: не удалось найти объект в OU – Mesjoggah

+1

Я думаю, вам было бы лучше создать пользователя и почтовый ящик в то же время, используя команда «New-Mailbox», для чего она предназначена. Таким образом вам не придется беспокоиться о том, что потенциально не синхронизируется сразу. Используйте «New-ADUser», когда вы уверены, что у них не будет почтового ящика. Таким образом, вы можете сохранить вывод из «New-Mailbox» и сразу вызвать команду 'Set-Mailbox'. – ChadSikorra

ответ

0

Попробуйте добавить командлет Start-Sleep перед командлетом, где вы получаете ошибку. Добавьте разумную задержку.

E.g. добавить 15 секунд использования задержки:

Start-Sleep -s 15 

Более подробно об этом командлете здесь: Start-Sleep

или вы можете попробовать ниже код:

do 
{ 
    Start-Sleep -s 10 
    $mailbox = Get-Mailbox -identity $sam 
} 
while($mailbox -eq $null) 

$mailbox | Set-Mailbox -ExternalOOFOptions InternalOnly