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 [email protected]
Este código funciona perfeitamente na metade do tempo, mas na outra metade recebo este 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 puder me ajudar a lançar 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. Eu acredito que simplesmente usar a opção -wait não funciona.
Use o
Start-Sleep
comando:pausará o script por 10 segundos.
Eu tive que lidar com algum tempo em um script do Exchange que escrevi há algum tempo. 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.
Ele apenas tenta obter o atributo "IsValid" da caixa de correio (neste exemplo) como um proxy para "a caixa de correio existe". Depois
get-mailboxpermission
de retornar true, a próxima etapa, definir uma permissão, realmente funcionará. Owrite-host
é apenas para fornecer uma barra de progresso.Você pode executá-lo como um trabalho em segundo plano e aguardar a conclusão desse trabalho. Assim:
Start-Sleep = espere x segundos
http://technet.microsoft.com/en-us/library/ee177002.aspx
Por que não algo como:
Eu uso esse tipo de comando com um addtional
start-sleep
após o teste inicial porque do until consome muitos ciclos do processador sem ele. Então o meu fica mais assim:Se o teste for mudar de estado rapidamente, não se preocupe com o
start-sleep
.