¿Qué tipo de bucle de PowerShell debería utilizar?

Los bucles se utilizan con mucha frecuencia en los scripts de PowerShell, y la gran mayoría de los scripts que he escrito a lo largo de los años han incluido al menos un bucle. Aun así, el bucle no es tan sencillo como podría parecer a primera vista. Si bien no hay nada demasiado complejo en la creación de un bucle, PowerShell admite varios tipos diferentes de bucles. Como tal, quería aprovechar la oportunidad para hablar sobre los diversos tipos de bucles que existen y cuándo es apropiado utilizar cada uno.

lazo de PowerShell

El bucle ForEach PowerShell

Quería comenzar hablando de los bucles ForEach porque este es el tipo de bucle que utilizo con más frecuencia.

Un bucle ForEach es útil cuando necesita realizar una acción en cada elemento de una colección de elementos. Por ejemplo, suponga que desea crear una lista de todos los procesos que se ejecutan en una computadora y luego realizar algún tipo de acción para cada proceso. El código se vería así:

$Processes = Get-Process
ForEach($Process in $Processes)
{
Do-Something
}

La primera línea crea una variable denominada $ Processes y la asigna a la lista de procesos. El bucle ForEach luego realiza una acción (en este caso, llama a una función llamada Do-Something) para cada proceso en la lista de procesos.

El bucle For

PowerShell también le permite crear un bucle For. Esto es diferente de un bucle ForEach. Un ciclo For generalmente se basa en un número que determina cuántas veces se ejecutará el ciclo. Aquí hay un ejemplo:

For ($A = 10; $A -GE 1; $A--)
{
Do-Something
}
In this case, the for loop is setting a variable named $A to a value of 10. If the contents of this variable are greater than or equal to 1 (-GE 1), then the loop runs. Each time the loop processes, the value of $A is decreased by 1 ($A--) until the value eventually reaches 1, which causes the loop to terminate.

El bucle while

Un bucle while funciona de una manera muy similar a un bucle For. Al igual que un bucle For, un bucle While solo avanza hasta que se cumple una determinada condición. El bloque de código que se muestra a continuación hace esencialmente lo mismo que el bucle For que le mostré en la sección anterior.

$A =10
While ($A -GT 0)
{
Do-Something
$A--
}

Aunque este bucle hace exactamente lo mismo que el bucle For que les mostré hace un momento, hay dos diferencias clave. La primera diferencia está en el valor de terminación que utilicé para el bucle.

El valor de terminación utilizado en el bucle for funciona como una instrucción if. Básicamente, está diciendo que se permitirá que el ciclo se ejecute si el valor es mayor o igual que 1. Esto significa que el ciclo terminará cuando el valor de $ A llegue a 0.

El ciclo While hace lo mismo, pero en lugar de indicar que el valor de $ A tiene que ser mayor o igual a 1, este ciclo funcionará siempre que $ A sea mayor que cero. Es una diferencia sutil, pero importante. Un bucle For procesa hasta que se cumple una condición específica, mientras que un bucle While progresa siempre que no se cumpla una condición. A menudo, estos dos tipos de bucles se pueden usar indistintamente. Pero puede que le resulte más conveniente utilizar un tipo de bucle sobre el otro, según la situación.

La otra gran diferencia entre la forma en que estos dos bucles está en la forma en que se declara el bucle. El bucle For incluye el valor inicial, la condición de terminación y el código para disminuir el contador del bucle dentro de la declaración del bucle (For ($ A = 10; $ A -GE 1; $ A–)). Por otro lado, el ciclo While obtiene su valor inicial desde fuera del ciclo, lo que significa que este tipo de ciclo será la mejor opción si desea basar el número de ciclos en una variable existente. Además, el código utilizado para disminuir el contador de bucle se encuentra en el cuerpo del bucle en lugar de en la declaración del bucle.

El bucle Do

El último tipo de bucle que quiero mostrarte es el bucle Do. El ciclo Do es muy similar al ciclo While y al ciclo For, pero hay una diferencia muy importante. Así es como se vería el script que he estado usando hasta ahora si se reescribiera para usar un bucle Do:

$A=10
Do
{
Do-Something
$A--
}
Until ($A -LE 0)

Una vez más, comenzamos estableciendo $ A en 10, y luego estamos repitiendo el código, disminuyendo la variable $ A durante cada ciclo. El ciclo avanza hasta que $ A alcanza un valor de 0.

Sin duda habrá notado que aunque la estructura básica de los bucles es similar a la que ya les he mostrado con los otros tipos de bucles, la sintaxis general es un poco diferente. Esto se remonta a la importante diferencia que mencioné anteriormente.

Imagine por un momento que tuviera que modificar la primera línea de código a $ A = 0. Aunque el valor de $ A ya está establecido en cero, el ciclo todavía se procesará una vez porque la condición no se evalúa hasta el final el lazo. La última línea de código le dice al ciclo que se detenga si $ A es menor o igual a 0. En este caso, comenzamos con un valor de cero y hay una línea en el código que disminuye $ A en uno ($ A -). Como tal, el valor de $ A sería -1 al final del ciclo. Es por eso que tenemos que verificar si $ A es menor o igual a cero en lugar de simplemente verificar si $ A = 0.

La conclusión es que un bucle Do solo debe usarse si desea que el código del bucle se ejecute al menos una vez, pase lo que pase.

Cada bucle de PowerShell tiene un propósito

PowerShell ofrece varios tipos de bucles diferentes y cada uno tiene su caso de uso único. Los bucles ForEach son los más adecuados para trabajar con matrices y colecciones de objetos, pero los otros tres tipos de bucles son de naturaleza más general y se pueden usar en una variedad de situaciones.

Imagen destacada: Shutterstock


Vistas de publicaciones:
21

Más Conceptos básicos de PowerShell artículos



About the Author

Leave a Reply

Your email address will not be published. Required fields are marked *