Oto mój obecny kod:
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
Ten kod działa bezbłędnie przez około połowę czasu, ale w drugiej połowie otrzymuję ten błąd:
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
Więc jeśli ktoś mógłby mi pomóc w rzuceniu polecenia oczekiwania po utworzeniu skrzynki pocztowej i poczekaniu, aż skrzynka użytkownika zostanie utworzona, zanim skrypt wyłączy ActiveSync itp., Byłoby to naprawdę pomocne. Uważam, że samo użycie przełącznika -wait nie działa.
email
exchange
exchange-2007
powershell
scripting
Paul Masek
źródło
źródło
while ( res-not-exist ) { Start-Sleep -s 1}
ten sposób zatrzymujesz skrypt tylko tak długo, jak to konieczne i tylko wtedy, gdy jest to konieczne.Musiałem poradzić sobie z pewnym czasem w skrypcie Exchange, który napisałem jakiś czas temu. W szczególności musiałem zmodyfikować uprawnienia do nowo utworzonej grupy dystrybucyjnej, ale musiałem poczekać, aż grupa dystrybucyjna zostanie faktycznie utworzona, zanim spróbuję ją zmodyfikować.
Próbuje po prostu usunąć atrybut „IsValid” ze skrzynki pocztowej (w tym przykładzie) jako serwer proxy dla „skrzynki pocztowej istnieje”. Po
get-mailboxpermission
zwróceniu wartości true następny krok, faktycznie ustawiony, będzie działał. Jestwrite-host
to po prostu, aby zapewnić pasek postępu.źródło
Możesz uruchomić go jako zadanie w tle, a następnie poczekać na zakończenie tego zadania. Lubię to:
źródło
Start-Sleep = poczekaj x sekund
http://technet.microsoft.com/en-us/library/ee177002.aspx
źródło
Dlaczego nie coś takiego:
Używam tego typu polecenia z dodatkowym testem
start-sleep
po wstępnym teście, ponieważ robię to, dopóki nie zje dużo cykli procesora bez niego. Więc moje wygląda mniej więcej tak:Jeśli test zmieni stan szybko, nie przejmuj się
start-sleep
.źródło