Aqui está meu código atual:
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 exchange@xyz.com
Esse código funciona perfeitamente na metade do tempo, mas na outra metade recebo esse erro em troca:
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
Portanto, se alguém pudesse me ajudar a executar algum tipo de comando de espera após a criação da caixa de correio e aguardar até que a caixa de correio do usuário seja criada antes que o script desative o ActiveSync, etc., seria realmente útil. Acredito que o simples uso da opção -wait não funcione.
email
exchange
exchange-2007
powershell
scripting
Paul Masek
fonte
fonte
while ( res-not-exist ) { Start-Sleep -s 1}
dessa maneira, você interrompe o script apenas pelo tempo que for necessário e somente se for necessário.Eu tive que lidar com algum tempo em um script do Exchange que escrevi há um tempo atrás. Especificamente, eu precisava modificar as permissões em um grupo de distribuição recém-criado, mas precisava esperar até que o grupo de distribuição fosse realmente criado antes de tentar modificá-lo.
Apenas tenta obter o atributo "IsValid" da caixa de correio (neste exemplo) como um proxy para "caixa de correio existe". Depois que
get-mailboxpermission
retornar true, o próximo passo, definir uma permissão realmente funcionará. Owrite-host
é apenas para fornecer uma barra de progresso.fonte
Você pode executá-lo como um trabalho em segundo plano e aguardar a conclusão desse trabalho. Como isso:
fonte
Start-Sleep = espera x segundos
http://technet.microsoft.com/en-us/library/ee177002.aspx
fonte
Por que não algo como:
Eu uso este tipo de comando com um addtional
start-sleep
após o teste inicial, porque fazer até come um monte de ciclos de processador sem ele. Então o meu se parece mais com isso:Se o teste vai mudar de estado rapidamente, quando não se preocupar com o
start-sleep
.fonte