Главная » Грабли » Небольшой баг в скрипте new-TestCasConnectivityUser.ps1

Небольшой баг в скрипте new-TestCasConnectivityUser.ps1

В Exchange есть весьма полезный командлет Test-OutlookWebServices. Однако, при первом запуске возникнет ошибка:


Для работы данного командлета необходимо наличие учетной записи, от имени который будет выполняться проверка.

Для создания тестовой учетной записи можно воспользоваться командлетом  new-TestCasConnectivityUser.ps1, который распологается в каталоге scripts (находится в корне инсталяционной дирректории Exchange Server).

Скрипт достаточно простой и принимает в качестве параметров подразделение, в котором будет создана учетная апись, пароль и диалплан (это нужно при наличии роли UM).

Однако после запуска данного скрипта, можно столкнуться с проблемой:

Обычно, данная ошибка бывает вызвана наличием контейнера, в название которого входит «Users». Информации по этой проблеме достаточно много и легко можно найти решение. Например — http://www.zerohoursleep.com/2010/10/new-testcasconnectivityuser-ps1-fails-with-verify-that-ou-users-exists/.

Однако возможна и более неоднозначная ситуация.

Рассмотрим детальнее скрипт:

$mailboxDatabaseName = $null;

get-MailboxDatabase -server $mailboxServer | foreach {$mailboxDatabaseName = $_.Guid.ToString()}

if ($mailboxDatabaseName -ne $null)

{

write-host $new_testcasuser_LocalizedStrings.res_0000 $exchangeServer.Fqdn

if ($Prompt -eq $true)

{

read-host $new_testcasuser_LocalizedStrings.res_PromptToQuitOrContinue

}

new-Mailbox -Name:$UserName -Alias:$UserName -UserPrincipalName:$UserPrincipalName -SamAccountName:$SamAccountName -Password:$SecurePassword -Database:$mailboxDatabaseName  -OrganizationalUnit:$OrganizationalUnit -ErrorVariable err -ErrorAction SilentlyContinue

$newUser = get-Mailbox $UserPrincipalName -ErrorAction SilentlyContinue

if ($newUser -eq $null)

{

$err = «Mailbox could not be created. Verify that OU ( $OrganizationalUnit ) exists and that password meets complexity requirements.»

}

}

Как видно из приведенного отрывка скрипта, при создании нового пользователя, для указания базы, в которой пользователь создается, используется цикл foreach, на вкох которому подается список баз.

В результате возможна хитрая ситуация:

На данном скриншоте видно, что учетная запись будет создана в базе a1_db.

Однако данная база в данный момент не смонтирована:

То есть скрипт пытается создать почтовый ящик в отмонтированной базе, что, естественно, заканчивается ошибкой.

Собственно, тут есть два пути. Первый это смонтировать базу. Второй — немного подправить скрипт.

В случае, если необходимо создавать учетную запись в конкретной базе, придется выбрать именно второй путь.

В этом случае достаточно после строки

get-MailboxDatabase -server $mailboxServer | foreach {$mailboxDatabaseName = $_.Guid.ToString()}

добавить

$mailboxDatabaseName = «MyMDB»

(правда не стоит забывать, что скрипт подписанный)

После этого скрипт отработает нормально и можно будет наконец воспользоваться командлетом Test-OutlookWebServices, чего мы собственно и добивались:

Реклама

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s