web-dev-qa-db-ja.com

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 <[email protected]>" -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`[email protected]" -SmtpServer [email protected]

このコードは約半分の時間で問題なく機能しますが、残りの半分ではこのエラーが発生します。

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               [email protected]      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スイッチを使用するだけでは機能しないと思います。

41
Paul Masek

使用 Start-Sleepコマンド:

Start-Sleep -s 10

スクリプトを10秒間一時停止します。

95
Sven

少し前に書いた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は単に進行状況バーを提供することです。

8
sysadmin1138

これをバックグラウンドジョブとして実行し、そのジョブが完了するまで待つことができます。このような:

$ enablemb = Start-Job {Enable-Mailbox -Identity "$ DName" -Database "$ RData"}
待機ジョブ$ enablemb
Receive-Job $ enablemb

4
Jason Berg

なぜ次のようなものではないのですか?

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を気にしないですぐに状態を変更する場合。

1
Sean
1
Bret Fisher