Назад | Перейти на главную страницу

Необходимо добавить команду «Подождите» в сценарий Powershell.

Вот мой текущий код:

Write-output “ENTER THE FOLLOWING DETAILS - When Creating Multiple New Accounts Go to           EMC hit F5(refresh) and make sure previous new account is listed before proceeding to the       next one”
$DName = Read-Host “User Diplay Name(New User)"
$RUser = Read-Host "Replicate User(Database Grab)"
$RData = ((Get-Mailbox -Identity $RUser).Database).DistinguishedName
$REmailInput = Read-Host “Requester's Name(Notification Email goes to this Person)"
$REmail = ((Get-Mailbox -Identity "$REmailInput").PrimarySmtpAddress).ToString()

Enable-Mailbox -Identity "$DName" -Database "$RData" 
Set-CASMailbox -Identity "$DName" -ActiveSyncEnabled $false -ImapEnabled $false -    PopEnabled $false


Send-MailMessage -From "John Doe <John.Doe@xyz.com>" -To $REmail -Subject       "$DName's email account" -Body "$DName's email account has been setup.`n`n`nJohn Doe`nXYZ`nSystems Administrator`nOffice: 123.456.7890`nJohn.Doe@xyz.com" -SmtpServer exchange@xyz.com

Этот код работает безупречно примерно в половине случаев, но в другой половине я получаю взамен эту ошибку:

ENTER THE FOLLOWING DETAILS - When Creating Multiple New Accounts Go to EMC hit
F5(refresh) and make sure previous new account is listed before proceeding to
the next one
User Diplay Name(New User): Jane Doe
Replicate User(Database Grab): Julie Doe
Requester's Name(Notification Email goes to this Person): Joanna Doe

Name                      Alias                ServerName       ProhibitSendQuo
                                                            ta
----                      -----                ----------       ---------------
Jane Doe                  JDDAFA               exchange@xyz.com      unlimited
Set-CASMailbox : Jane Doe is not a mailbox user.
At C:\emailclientbasic.ps1:11 char:15
+ Set-CASMailbox <<<<  -Identity "$DName" -ActiveSyncEnabled $false -ImapEnable
d $false -PopEnabled $false
+ CategoryInfo          : NotSpecified: (0:Int32) [Set-CASMailbox], Manage
mentObjectNotFoundException
+ FullyQualifiedErrorId : 292DF1AC,Microsoft.Exchange.Management.Recipient
Tasks.SetCASMailbox

Поэтому, если бы кто-нибудь мог помочь мне добавить какую-то команду ожидания после создания почтового ящика и дождаться, пока почтовый ящик пользователя не будет создан, прежде чем сценарий отключит ActiveSync и т.д., это было бы действительно полезно. Я считаю, что просто использовать переключатель -wait не получится.

Использовать Start-Sleep команда:

Start-Sleep -s 10

приостановит скрипт на 10 секунд.

Мне пришлось иметь дело с некоторым временем в сценарии Exchange, который я написал некоторое время назад. В частности, мне нужно было изменить разрешения для вновь созданной группы рассылки, но мне нужно было дождаться фактического создания группы рассылки, прежде чем пытаться ее изменить.

do {
    sleep -seconds 1
    $mailboxExists = get-mailboxpermission -Identity "CN=$displayName,$DN" -User "NT AUTHORITY\SELF" -ErrorAction SilentlyContinue |fw IsValid
    write-host "." -nonewline
} while (!$mailboxExists)

Он просто пытается получить атрибут «IsValid» из почтового ящика (в этом примере) в качестве прокси для «почтовый ящик существует». однажды get-mailboxpermission возвращает true, следующий шаг, установка разрешения, действительно будет работать. В write-host просто предоставить индикатор выполнения.

Вы можете запустить его как фоновое задание, а затем дождаться его завершения. Как это:

$ enablemb = Start-Job {Enable-Mailbox -Identity "$ DName" -Database "$ RData"}
Ожидание-задание $ enablemb
Получить задание $ enablemb

Почему не что-то вроде:

do {
$testpath = Test-Path -path \\dns2\d$\test
}
until ($testpath -eq $true)

Я использую этот тип команды с дополнительным start-sleep после начального теста, потому что делать до тех пор, пока не съедает много циклов процессора без него. Итак, мой выглядит примерно так:

do {
$testpath = Test-Path -path \\dns2\d$\test
start-sleep -s 10}
until ($testpath -eq $true)

Если тест собирается быстро изменить состояние, не беспокойтесь о start-sleep.

Start-Sleep = ждать x секунд

http://technet.microsoft.com/en-us/library/ee177002.aspx