Cómo salir de un objeto Foreach en PowerShell
-
Utiliza la condición
break
para salir deForEach-Object
en PowerShell -
Utiliza
if
ybreak
para salir deForEach-Object
en PowerShell -
Utiliza
if
yreturn
para salir deForEach-Object
en PowerShell -
Utiliza
if
ycontinue
para salir deForEach-Object
en PowerShell - Conclusión

El cmdlet ForEach-Object
permite al usuario iterar a través de colecciones y operar sobre cada elemento en una colección de objetos de entrada. En ForEach-Object
, los objetos de entrada se envían al cmdlet o se especifican utilizando el parámetro -InputObject
.
Hay dos formas diferentes de construir un comando ForEach-Object
en PowerShell: Bloque de script
y Sentencia de operación
. El cmdlet ForEach-Object
ejecuta el bloque de script o la sentencia de operación de cada objeto de entrada.
Utiliza un bloque de script
para especificar la operación. La variable $_
se utiliza dentro del bloque de script para representar el objeto de entrada actual.
El bloque de script
puede contener cualquier script de PowerShell. Por ejemplo, el siguiente comando obtiene el valor de la propiedad Name
, la función y los alias
de cada cmdlet instalados en el ordenador.
Get-Command | ForEach-Object { $_.Name }
Otra forma de construir el comando ForEach-Object
es utilizar la sentencia de operación
. Puedes especificar un valor de propiedad o llamar a un método con la sentencia de operación.
Get-Command | ForEach-Object Name
A veces, hay situaciones en las que podrías querer salir de ForEach-Object
, pero funciona de manera diferente a la sentencia ForEach
. En ForEach-Object
, la sentencia se ejecuta tan pronto como se produce cada objeto.
En la sentencia ForEach
, todos los objetos se recopilan antes de que se ejecute el bucle. El ForEach-Object
es un cmdlet, no un bucle real.
Cuando usas break
o continue
para salir del bucle, todo el script se termina en lugar de saltar la sentencia después de él. Sin embargo, es posible salir del objeto ForEach-Object
utilizando algunas condiciones en PowerShell.
Utiliza la condición break
para salir de ForEach-Object
en PowerShell
En PowerShell, el bucle foreach-object
se utiliza comúnmente para iterar sobre cada elemento en una colección o canalización. Ocasionalmente, surge la necesidad de salir de este bucle prematuramente en función de ciertas condiciones.
La sentencia break
proporciona una forma sencilla de lograr esto al terminar el bucle inmediatamente cuando se cumple una condición específica.
$numbers = "one", "two", "three", "four", "five"
$Break = $False;
$numbers | Where-Object { $Break -eq $False } | ForEach-Object {
$Break = $_ -eq "three";
Write-Host "The number is $_.";
}
En este fragmento de código, inicializamos un array $numbers
que contiene cadenas representando números. También establecemos $Break
en $False
inicialmente.
Dentro del bucle foreach-object
, utilizamos Where-Object
para filtrar elementos según la variable $Break
. Si $Break
es $False
, el bucle continúa; de lo contrario, se detiene.
Dentro del bucle, verificamos si el elemento actual es igual a three
. Si lo es, establecemos $Break
en $True
, provocando que el bucle se termine.
Salida:
Utiliza if
y break
para salir de ForEach-Object
en PowerShell
A veces, hay necesidad de salir de este bucle prematuramente en función de condiciones específicas. El método if
ofrece un enfoque sencillo para lograr esta tarea al evaluar una condición dentro del bucle y activar una salida cuando se cumple la condición.
En este método, necesitas usar un valor vacío
en una colección de objetos para salir de ForEach-Object
en PowerShell. Por ejemplo, puedes usar la condición if
para salir de ForEach-Object
.
$numbers = "one", "two", "three", "", "four"
$numbers | ForEach-Object {
if ($_ -eq "") {
break;
}
Write-Host "The number is $_."
}
En el fragmento de código proporcionado, inicializamos un array $numbers
que contiene cadenas representando números. Dentro del bucle foreach-object
, iteramos sobre cada elemento en el array.
Usando la sentencia if
, verificamos si el elemento actual $_
es una cadena vacía. Si la condición se evalúa como verdadera, usamos break
para salir del bucle inmediatamente.
De lo contrario, el bucle continúa, y mostramos el número actual usando Write-Host
.
Salida:
Utiliza if
y return
para salir de ForEach-Object
en PowerShell
Salir de un bucle foreach-object
en PowerShell utilizando la combinación de los métodos if
y return
permite la terminación prematura del bucle en función de condiciones específicas. Este método es particularmente útil cuando necesitas detener la ejecución del bucle y devolver el control al llamador cuando se cumple una determinada condición.
Dentro del bucle, se emplea una sentencia if
para evaluar la condición para salir del bucle. Si la condición se evalúa como verdadera, se ejecuta la sentencia return
, finalizando inmediatamente la ejecución del bucle y devolviendo el control al llamador.
$numbers = "one", "two", "three", "four", "five"
$numbers | ForEach-Object {
if ($_ -eq "three") {
return
}
Write-Host "The number is $_."
}
En el fragmento de código proporcionado, inicializamos un array $numbers
que contiene cadenas representando números. Dentro del bucle foreach-object
, iteramos sobre cada elemento en el array.
Usando la sentencia if
, verificamos si el elemento actual $_
es igual a three
. Si la condición se evalúa como verdadera, usamos return
para salir del bucle inmediatamente.
De lo contrario, el bucle continúa, y mostramos el número actual usando Write-Host
.
Salida:
Utiliza if
y continue
para salir de ForEach-Object
en PowerShell
En PowerShell, la sentencia continue
se utiliza para omitir el resto de la iteración actual de un bucle y proceder a la siguiente iteración. Aunque se emplea principalmente en bucles para omitir iteraciones específicas, continue
también puede ser utilizado para implementar una forma de salida del bucle dentro de un foreach-object
.
Al colocar estratégicamente la sentencia continue
dentro del bucle e incorporar lógica condicional, puedes lograr la terminación temprana del bucle en función de condiciones específicas.
$numbers = 1..10
$numbers | ForEach-Object {
if ($_ -eq 5) {
continue
}
Write-Host "Number: $_"
}
En el ejemplo de código proporcionado, inicializamos un array $numbers
que contiene números del 1 al 10. Dentro del bucle foreach-object
, iteramos sobre cada número en el array.
Usando la sentencia if
, verificamos si el número actual es igual a 5. Si la condición se evalúa como verdadera, se ejecuta la sentencia continue
, lo que provoca que el bucle omita la iteración actual y proceda a la siguiente.
Esto logra efectivamente la terminación temprana del bucle cuando se cumple la condición especificada.
Salida:
Conclusión
Para resumir, el cmdlet ForEach-Object
en PowerShell facilita la iteración a través de colecciones, permitiendo operaciones en cada elemento de manera individual. Exploramos varios métodos para salir prematuramente de un bucle ForEach-Object
, incluyendo el uso de break
, return
y continue
.
Si bien break
y continue
proporcionan un control de flujo directo dentro del bucle, return
ofrece un enfoque alternativo para salir del bucle y regresar al llamador. Cada método tiene sus propios casos de uso y beneficios, proporcionando flexibilidad en la ejecución del script.
De cara al futuro, los usuarios pueden profundizar su comprensión experimentando con estos métodos en diferentes escenarios, explorando sus matices y dominando su aplicación en scripting de PowerShell.