Hier ist mein aktueller Code:
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
Dieser Code funktioniert ungefähr die Hälfte der Zeit einwandfrei, aber die andere Hälfte bekomme ich diesen Fehler zurück:
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
Wenn mir jemand helfen könnte, nach dem Erstellen des Postfachs einen Wartebefehl einzugeben und zu warten, bis das Postfach des Benutzers erstellt ist, bevor das Skript ActiveSync usw. deaktiviert, wäre dies sehr hilfreich. Ich glaube, dass es nicht funktioniert, einfach den Schalter -wait zu verwenden.
email
exchange
exchange-2007
powershell
scripting
Paul Masek
quelle
quelle
while ( res-not-exist ) { Start-Sleep -s 1}
diese Weise halten Sie das Skript nur so lange an, wie es erforderlich ist und nur, wenn es erforderlich ist.Ich musste mich in einem Exchange-Skript, das ich vor einiger Zeit geschrieben hatte, mit dem Timing befassen. Insbesondere musste ich die Berechtigungen für eine neu erstellte Verteilergruppe ändern, aber ich musste warten, bis die Verteilergruppe tatsächlich erstellt wurde, bevor ich versuchte, sie zu ändern.
Es wird nur versucht, das Attribut "IsValid" aus der Mailbox zu entfernen (in diesem Beispiel), als Proxy für "Mailbox existiert". Sobald
get-mailboxpermission
true zurückgegeben wird, funktioniert der nächste Schritt, das Festlegen einer Berechtigung, tatsächlich. Daswrite-host
ist nur eine Fortschrittsanzeige.quelle
Sie können es als Hintergrundjob ausführen und dann warten, bis dieser Job abgeschlossen ist. So was:
quelle
Start-Sleep = x Sekunden warten
http://technet.microsoft.com/en-us/library/ee177002.aspx
quelle
Warum nicht so etwas wie:
Ich benutze diese Art von Befehlen mit einem Zusatz
start-sleep
nach dem ersten Test, weil do, bis es viele Prozessorzyklen ohne ihn isst. Meine sieht also eher so aus:Wenn sich der Zustand des Tests schnell ändert, machen Sie sich keine Sorgen um die
start-sleep
.quelle