Voici mon code actuel:
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
Ce code fonctionne parfaitement environ la moitié du temps, mais l'autre moitié, je reçois cette erreur en retour:
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
Donc, si quelqu'un pouvait m'aider à lancer une sorte de commande d'attente après la création de la boîte aux lettres et attendre que celle-ci soit créée avant que le script ne désactive ActiveSync, etc., cela serait vraiment utile. Je crois que simplement utiliser le commutateur -wait ne fonctionne pas.
email
exchange
exchange-2007
powershell
scripting
Paul Masek
la source
la source
while ( res-not-exist ) { Start-Sleep -s 1}
cette façon, vous n'arrêtez le script que tant que cela est nécessaire et uniquement si cela est nécessaire.J'ai dû composer avec un timing dans un script Exchange que j'ai écrit il y a quelque temps. Plus précisément, je devais modifier les autorisations sur un groupe de distribution nouvellement créé, mais je devais attendre que le groupe de distribution soit réellement créé avant de tenter de le modifier.
Il tente simplement d'obtenir l'attribut "IsValid" de la boîte aux lettres (dans cet exemple) en tant que proxy pour "la boîte aux lettres existe". Une fois que la valeur est
get-mailboxpermission
vraie, la prochaine étape, définir une permission, fonctionnera réellement. Lewrite-host
est juste pour fournir une barre de progression.la source
Vous pouvez l'exécuter en tant que tâche en arrière-plan, puis attendre la fin de cette tâche. Comme ça:
la source
Start-Sleep = attend x secondes
http://technet.microsoft.com/en-us/library/ee177002.aspx
la source
Pourquoi pas quelque chose comme:
J'utilise ce type de commande avec un complément
start-sleep
après le test initial, car il ne consomme pas beaucoup de cycles du processeur. Alors le mien ressemble plus à ceci:Si le test doit changer d’état rapidement, ne vous inquiétez pas
start-sleep
.la source