Cómo salir de un objeto Foreach en PowerShell

  1. Utiliza la condición break para salir de ForEach-Object en PowerShell
  2. Utiliza if y break para salir de ForEach-Object en PowerShell
  3. Utiliza if y return para salir de ForEach-Object en PowerShell
  4. Utiliza if y continue para salir de ForEach-Object en PowerShell
  5. Conclusión
Cómo salir de un objeto Foreach en PowerShell

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:

salida del objeto foreach en powershell - salida 1

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:

salir del objeto foreach en powershell - salida 2

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:

salida del objeto foreach en powershell - salida 3

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:

salida del objeto foreach en powershell - salida 4

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.

¿Disfrutas de nuestros tutoriales? Suscríbete a DelftStack en YouTube para apoyarnos en la creación de más guías en vídeo de alta calidad. Suscríbete
Rohan Timalsina avatar Rohan Timalsina avatar

Rohan is a learner, problem solver, and web developer. He loves to write and share his understanding.

LinkedIn Website

Artículo relacionado - PowerShell Object