Aquí está mi código actual:
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
Este código funciona sin problemas aproximadamente la mitad del tiempo, pero la otra mitad recibo este error a cambio:
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
Entonces, si alguien pudiera ayudarme a incluir algún tipo de comando de espera después de crear el buzón y esperar hasta que se cree el buzón del usuario antes de que el script desactive ActiveSync, etc., sería realmente útil. Creo que simplemente usando el modificador -wait no funciona.
email
exchange
exchange-2007
powershell
scripting
Paul Masek
fuente
fuente
while ( res-not-exist ) { Start-Sleep -s 1}
esta manera, detiene el script solo mientras sea necesario y solo si es necesario.Tuve que lidiar con algún momento en un script de Exchange que escribí hace un tiempo. Específicamente, necesitaba modificar los permisos en un grupo de distribución recién creado, pero tenía que esperar hasta que el grupo de distribución se creara antes de intentar modificarlo.
Simplemente intenta quitar el atributo "IsValid" del buzón (en este ejemplo) como un proxy para "existe un buzón". Una vez que
get-mailboxpermission
devuelve verdadero, el siguiente paso, establecer un permiso realmente funcionará. Elwrite-host
es solo para proporcionar una barra de progreso.fuente
Puede ejecutarlo como un trabajo en segundo plano y luego esperar a que termine ese trabajo. Me gusta esto:
fuente
Start-Sleep = esperar x segundos
http://technet.microsoft.com/en-us/library/ee177002.aspx
fuente
¿Por qué no algo como:
Utilizo este tipo de comando con un adicional
start-sleep
después de la prueba inicial porque hasta que come muchos ciclos de procesador sin él. Entonces el mío se parece más a esto:Si la prueba va a cambiar de estado rápidamente cuando no se preocupe por el
start-sleep
.fuente