52 votos

Necesidad de agregar un comando de "Espera" a un script de Powershell

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 <John.Doe@xyz.com>" -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`nJohn.Doe@xyz.com" -SmtpServer exchange@xyz.com

Este código funciona perfectamente alrededor de la mitad del tiempo, pero la otra mitad que recibo a cambio este error:

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               exchange@xyz.com      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

Así que si alguien puede ayudarme a tirar en una especie de comando espera después de haber creado el buzón y espere hasta que se crea del buzón del usuario antes de que el script deshabilita ActiveSync, etc. sería muy útil. Creo que simplemente usando la - espera interruptor no funciona.

118voto

Sven Puntos 51980

Uso el Start-Sleep comando:

Start-Sleep -s 10

hará una pausa el guión durante 10 segundos.

8voto

sysadmin1138 Puntos 86362

He tenido que lidiar con algo de tiempo en un Cambio de guión que escribí hace un tiempo. Específicamente, me necesarias para modificar los permisos de un recién creado grupo de distribución, pero es necesario esperar hasta la distribución del grupo fue creado antes de intentar modificarlo.

do {
    sleep -seconds 1
    $mailboxExists = get-mailboxpermission -Identity "CN=$displayName,$DN" -User "NT AUTHORITY\SELF" -ErrorAction SilentlyContinue |fw IsValid
    write-host "." -nonewline
} while (!$mailboxExists)

Sólo en el intento "IsValid" atributo fuera del buzón de correo (en este ejemplo) como un proxy para el "buzón existe". Una vez get-mailboxpermission devuelve true, el siguiente paso, el establecimiento de un permiso realmente funcione. El write-host es sólo para proporcionar una barra de progreso.

4voto

Jason Berg Puntos 14180

Podrías ejecutarlo como un trabajo de fondo y luego esperar a terminar ese trabajo. Así:

$enablemb = Inicio-trabajo {Enable-buzón-identidad "$DName"-base de datos "$RData"}
Espera-trabajo $enablemb
Recibir-trabajo $enablemb

1voto

Peter Bagnall Puntos 738

Inicio-Sleep = esperar x segundos

http://technet.Microsoft.com/en-us/library/ee177002.aspx

1voto

Sean Puntos 11

¿Por qué no algo como:

do {
$testpath = Test-Path -path \\dns2\d$\test
}
until ($testpath -eq $true)

Utilizar este tipo de comando con un adicional start-sleep después de la inicial prueba porque hacen hasta come mucho de ciclos de procesador sin él. Tan mía, se ven más como esto:

do {
$testpath = Test-Path -path \\dns2\d$\test
start-sleep -s 10}
until ($testpath -eq $true)

Si la prueba se va a cambiar rápidamente de estado cuando no te preocupes por el start-sleep .

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: