Los bucles son una de las funciones básicas de cualquier lenguaje de programación o script. Uno de esos bucles es el bucle Do While, que ejecuta un fragmento de código mientras la condición sea verdadera.
En PowerShell, podemos usar un bucle While y un bucle Do-While. Pueden parecer iguales, pero tienen una diferencia que es importante comprender.
En este artículo, explicaré la diferencia entre los dos bucles y mostraré cómo usar el bucle Do-While en su script.
Bucle Do While de PowerShell
Al escribir un script, a veces es necesario ejecutar un fragmento de código durante una determinada cantidad de tiempo hasta que se cumpla una condición. Podemos hacerlo con un bucle, que es una de las instrucciones de flujo de control que podemos utilizar.
Ahora en PowerShell, tenemos tres tipos de bucle diferentes que podemos usar:
- Bucle While
- Bucle Do While
- Hacer hasta bucle
El bucle While solo ejecutará el código dentro del bucle si la condición es verdadera. Sin embargo, Do While y Do Until ejecutarán el código dentro del bucle al menos una vez. Esta es una diferencia importante que se debe tener en cuenta.
La diferencia entre Do-While y Do-Until es que el primero ejecutará el código en el bucle siempre que la condición sea verdadera, mientras que Do-Until ejecuta el código siempre que la condición sea falsa.
También es bueno saber que PowerShell no continuará con la ejecución de su script hasta que se complete el bucle.
Uso del bucle Do-While
Para utilizar el bucle Do-While dentro de nuestros scripts, necesitaremos definir el código que se ejecutará en la parte Do y agregar una condición en la parte While.
Veamos un ejemplo sencillo. El código siguiente escribirá el número actual ($i
), y añádele 1, siempre que$i
es menor que 5:
$i = 0 do { # code to execute Write-Host "The number is $i" $i++ } while ($i -le 5)
Pruebe el ejemplo anterior, simplemente cópielo y péguelo en la Terminal de Windows. Verá que el código se ejecuta mientras la condición sea verdadera.

Continuar y romper
Al trabajar con bucles en PowerShell, podemos usarContinue
yBreak
para controlar o interferir con el flujo del bucle. Cuando se encuentra la instrucción Break dentro de un bucle, el script sale del bucle y continúa por debajo del bucle con la siguiente línea de código. Esto se hace independientemente de la condición que se especifique en la instrucción While.
Por otro lado, la instrucción Continue dejará de procesar el elemento actual en el bucle y saltará a la siguiente iteración. La instrucción Continue volverá a evaluar la condición While. Por lo tanto, si la condición se cumple antes de la instrucción Continue, el bucle Do-While habrá finalizado.
Veamos un ejemplo de Continue dentro de un bucle. El código que aparece a continuación obtendrá todos los archivos del directorio indicado. Si encontramos un archivo oculto, se activa la instrucción Continue y pasa al siguiente:
$files = Get-ChildItem "C:\Temp" $i = 0 Do { $file = $files[$i] if ($file.Attributes -match "Hidden") { $i++ continue # Skip hidden files } Write-Host "Processing file: $file.Name" $i++ } While ($i -lt $files.Count)
La sentencia Break se puede utilizar, por ejemplo, para comprobar si queremos continuar con el bucle. El ejemplo siguiente le preguntará al usuario si quiere continuar y, si la respuesta es no, saldremos del bucle:
Do { $response = Read-Host "Do you want to continue? (yes/no)" if ($response -eq "no") { Write-Host "Exiting loop." break # Exit the loop if the user chooses "no" } Write-Host "Continuing..." } While ($response -ne "no") Write-Host "Loop ended."
Ejemplos de Do While
Personalmente, me resulta más fácil aprender a programar o a crear scripts con ejemplos. Por eso, he creado un par de ejemplos realistas de Do-While para ayudarte a empezar.
El primero que vamos a analizar es un pequeño script que esperará hasta que se ejecute el servicio especificado. En este ejemplo, vamos a esperar hasta que se ejecute el servicio Windows Update. Tenga en cuenta que PowerShell no ejecutará el código que se encuentra debajo del bucle Do While hasta que se cumpla la condición While:
$serviceName = "wuauserv" # Windows Update service $serviceStatus = (Get-Service -Name $serviceName).Status Do { Write-Host "Waiting for the service '$serviceName' to start..." Start-Sleep -Seconds 5 $serviceStatus = (Get-Service -Name $serviceName).Status } While ($serviceStatus -ne "Running") Write-Host "The service '$serviceName' is now running."
Para el ejemplo anterior, en realidad comenzarías con unDeclaración que verifica si el servicio se está ejecutando o no. Si el servicio no se está ejecutando, puede iniciarlo y luego usar el código anterior para esperar hasta que esté en funcionamiento.
Validación de la entrada del usuario
Otro caso de uso común es cuando necesitas validar una entrada de usuario en tu script. Podemos usar el bucle Do-While para seguir solicitando una nueva entrada hasta que coincida con nuestra condición definida. Por ejemplo, solicitamos una dirección de correo electrónico y verificaremos si coincide con el patrón de dirección de correo electrónico antes de continuar:
$emailPattern = "^[\w\.-]+@[\w\.-]+\.\w+$" $email = "" Do { $email = Read-Host "Enter a valid email address" } While ($email -notmatch $emailPattern) Write-Host "Valid email entered: $email"
En la condición While, no estamos limitados a una sola condición. Podemos tener múltiples condiciones y combinarlas usando el-And
o-Or
Por ejemplo, podemos establecer un máximo de intentos que el usuario puede hacer:
$maxAttempts = 3 $attempts = 0 do { $input = Read-Host "Enter a number between 1 and 10" $attempts++ } while (($input -lt 1 -or $input -gt 10) -and ($attempts -ne $maxAttempts))
Bucle infinito
Si establece la condición como verdadera, puede crear un bucle infinito en PowerShell. El código dentro del bucle se ejecutará hasta que se complete el ciclo.$condition
dentro del bucle es verdadero. Entonces podemos usar elBreak
Declaración para salir del bucle.
Do { # Do stuff forever Write-Host 'looping' # Use Break to exit the loop If ($condition) { Break } } While ($true)
Intento de descargar archivo
Los bucles do-while también son una gran opción cuando quieres probar algo. En el ejemplo siguiente, intentaremos descargar un archivo., podemos comprobar si el intento de descarga fue exitoso o no.
Seguiremos intentando descargar el archivo hasta que tenga éxito o se alcance el máximo de intentos.
$url = "https://example.com/file.zip" $destination = "C:\Downloads\file.zip" $attempt = 0 $maxAttempts = 5 Do { $attempt++ Write-Host "Attempt $attempt: Downloading file..." try { Invoke-WebRequest -Uri $url -OutFile $destination $success = $true } catch { Write-Host "Download failed, retrying..." Start-Sleep -Seconds 5 $success = $false } } While (-not $success -and $attempt -lt $maxAttempts) if ($success) { Write-Host "File downloaded successfully!" } else { Write-Host "Failed to download file after $maxAttempts attempts." }
Terminando
Los bucles Do-While son una excelente instrucción de flujo de control para usar en PowerShell. Tenga en cuenta que el código dentro del bucle Do siempre se ejecuta al menos una vez. Si solo desea ejecutar el código cuando se cumple la condición, deberá usar el bucle While normal.
Si desea obtener más información sobre PowerShell, asegúrese de consultar laY por supuesto elY si tienes alguna pregunta, simplemente deja un comentario a continuación.