PowerShell ForEach Loop [con ejemplos]
Para convertirte en un experto en PowerShell, debes saber cómo trabajar con el bucle foreach. Explicaré en detalle el bucle foreach anidado y el manejo de errores en un bucle foreach de PowerShell.
El bucle Foreach de PowerShell recorre en iteración matrices, cmdlets o archivos de script. Simplifica las tareas repetitivas al procesar cada elemento de una colección.
Ahora, comprendamos su sintaxis y algunos ejemplos de bucle foreach.
¿Qué es un bucle ForeEch en PowerShell?
El bucle ForEach en PowerShell se utiliza para iterar sobre una colección de elementos, como una matriz o una lista, y realizar acciones en cada elemento. Este bucle ayudará a los desarrolladores a automatizar tareas repetitivas.
Por ejemplo, si tiene una lista de nombres de archivos, un bucle Foreach de PowerShell puede procesar cada archivo y realizar las mismas acciones en cada archivo.
Sintaxis de ForEach Loop
Aquí está la sintaxis del bucle foreach de PowerShell.
foreach ($item in $collection) {
# Perform actions with $item
}Aquí, $collection es la matriz o lista que se está procesando y $item representa el elemento actual en cada iteración. El bloque de script dentro de las llaves define las acciones realizadas en cada elemento.
Ejemplos de bucles foreach de PowerShell
Ahora, veamos algunos ejemplos del uso de un bucle foreach en PowerShell.
Ejemplo 1: recorrer elementos de matriz en bucle
Ahora, suponga que tiene una matriz de PowerShell como la siguiente:
$numbers = @(1, 2, 3, 4, 5)
or
$numbers = 1..5Ahora, puede utilizar el siguiente script de PowerShell para recorrer la matriz anterior.
foreach ($number in $numbers) {
Write-Output $number
}Aquí está el guión completo.
$numbers = 1..5
foreach ($number in $numbers) {
Write-Output $number
}En este script, el bucle ForEach recorre la matriz $numbers, que contiene los números del 1 al 5. Para cada número, envía el número a la consola.
Ejecuté el script de PowerShell anterior y puedes ver el resultado en la siguiente captura de pantalla:
Leer concatenar cadenas dentro de bucles en PowerShell
Ejemplo 2: recorrer archivos en una carpeta usando ForEach Loop
Ahora, déjame mostrarte un ejemplo en el que podemos recorrer todos los archivos de una carpeta usando el bucle ForEach de PowerShell.
$items = Get-ChildItem -Path "C:\MyFolder"
ForEach ($item in $items) {
Write-Output $item.Name
}Aquí, el cmdlet Get-ChildItem recupera todos los elementos del directorio C:\MyFolder y los almacena en la variable $items . El bucle ForEach recorre cada elemento de la colección $items y genera el nombre de cada elemento.
La siguiente captura de pantalla muestra todos los nombres de archivos de la carpeta después de ejecutar el script usando el código VS.
Ejemplo 3: manipular objetos dentro del bucle ForEach
Dentro de un bucle foreach, los objetos se pueden manipular utilizando varias técnicas. Por ejemplo, agregar propiedades a objetos o modificar las existentes.
Aquí hay un ejemplo.
$processes = Get-Process
foreach ($process in $processes) {
$process | Add-Member -NotePropertyName "IsA" -NotePropertyValue ($process.Name -like "A*")
}Leer mientras se realiza el bucle en PowerShell
Flujo de control en bucles Foreach en PowerShell
Déjame mostrarte algunas cosas avanzadas en el bucle foreach. Por ejemplo, le mostraré cómo usar declaraciones de control de flujo en bucles foreach en PowerShell, como declaraciones condicionales, declaraciones de interrupción y continuación, etc.
1. Implementar condiciones con declaraciones If
El uso de declaraciones If dentro de un bucle foreach le permite ejecutar código específico solo cuando se cumplen ciertas condiciones. Al verificar la condición dentro del bucle, puede decidir qué acciones se realizan en cada elemento. Por ejemplo:
foreach ($item in $items) {
if ($item -eq "target") {
Write-Output "Found the target!"
}
}Este bucle comprueba si $item es igual a "objetivo" y luego genera un mensaje. Las declaraciones If brindan la flexibilidad de incluir múltiples condiciones usando elseif y else.
2. Utilice Break en un bucle ForEach
La instrucción break se utiliza para salir prematuramente del bucle ForEach. Esto puede resultar útil cuando se cumple una determinada condición y ya no es necesario seguir iterando sobre los elementos restantes.
A continuación se muestra un ejemplo y el script de PowerShell completo.
$numbers = 1..10
ForEach ($number in $numbers) {
if ($number -eq 5) {
break
}
Write-Output "Number: $number"
}Este script generará:
Number: 1
Number: 2
Number: 3
Number: 4El bucle sale cuando $number es igual a 5.
Aquí está la captura de pantalla que muestra el resultado; también obtendrá el mismo resultado si ejecuta el script anterior.
3. Utilice Continuar en ForEach Loop
La instrucción continue se utiliza para omitir la iteración actual y pasar al siguiente elemento de la colección. Esto puede resultar útil cuando desea omitir ciertos elementos según una condición.
Aquí hay un script de PowerShell completo.
$numbers = 1..5
ForEach ($number in $numbers) {
if ($number -eq 3) {
continue
}
Write-Output "Number: $number"
}Este script generará:
Number: 1
Number: 2
Number: 4
Number: 5Se salta el número 3.
A continuación se muestra la captura de pantalla para su referencia:
Leer PowerShell para bucle
Bucle ForEach anidado en PowerShell
Aquí hay otro concepto avanzado; Déjame mostrarte cómo usar un bucle foreach anidado en PowerShell con un ejemplo.
Los bucles anidados significan agregar un bucle dentro de otro bucle.
Los bucles anidados ForEach se utilizan para iterar sobre varias colecciones. A continuación se muestra un ejemplo de cómo utilizar bucles anidados para combinar elementos de dos matrices.
$outerArray = 1..3
$innerArray = 'A','B','C'
ForEach ($outer in $outerArray) {
ForEach ($inner in $innerArray) {
Write-Output "$outer $inner"
}
}En este script, el bucle externo itera sobre los números del 1 al 3, y el bucle interno itera sobre las letras de la A a la C. Para cada combinación, genera el número y la letra.
Salida:
1 A
1 B
1 C
2 A
2 B
2 C
3 A
3 B
3 CManejar errores en los bucles Foreach de PowerShell
Siempre se recomienda manejar errores en un script de PowerShell. Entonces, déjame mostrarte cómo manejar errores en un bucle foreach en PowerShell.
Para manejar estos errores, use bloques Try-Catch dentro del bucle foreach. Este enfoque permite que los scripts sigan ejecutándose incluso cuando se producen errores.
Por ejemplo:
foreach ($item in $collection) {
try {
# Your code here
} catch {
Write-Error "An error occurred: $_"
}
}Le mostraremos una matriz numérica simple y manejaremos los errores dentro de un bucle Foreach . Por ejemplo, podemos intentar dividir un número por cada elemento de una matriz y manejar cualquier error de división por cero.
$numbers = @(10, 5, 0, 2)
# Number to be divided
$dividend = 100
# Loop through each number in the array
foreach ($number in $numbers) {
try {
# Attempt to divide the dividend by the current number
$result = $dividend / $number
Write-Output "100 divided by $number is $result"
} catch {
# Handle the error using ${} to delimit the variable name
Write-Error "Error dividing 100 by ${number}: $($_.Exception.Message)"
}
}- Inicialización: se define una matriz numérica
$numbersy un dividendo$dividend. - Bucle Foreach: el bucle
foreachrecorre en iteración cada número de la matriz. - Bloque de prueba: dentro del bloque
try, el script intenta dividir el dividendo por el número actual. Si el número es cero, se producirá un error de división por cero. - Bloque Catch: si se produce un error (por ejemplo, división por cero), se ejecuta el bloque
catch. El error se registra medianteWrite-Error.
Cuando utiliza el bloque try-catch, incluso si se produce un error de división por cero, el script continúa procesando los números restantes en la matriz.
Salida:
# 100 divided by 10 is 10
# 100 divided by 5 is 20
# Error dividing 100 by 0: Attempted to divide by zero.
# 100 divided by 2 is 50Este método ayuda a manejar errores en el script mientras se procesan matrices numéricas en PowerShell.
El resultado exacto después de ejecutar el código se puede ver en la siguiente captura de pantalla:
Conclusión
El bucle ForEach de PowerShell es útil para iterar a través de colecciones como matrices, listas, etc.
Espero que ahora tenga una idea completa de cómo utilizar el bucle foreach de PowerShell con los ejemplos anteriores. También te he explicado:
- Cómo utilizar declaraciones break y continue en el bucle foreach.
- Bucle foreach anidado en PowerShell
- Cómo usar try-catch en un bucle foreach




