Powershell – Part 4 – Arrays and For Loops

X

Privacy & Cookies

This site uses cookies. By continuing, you agree to their use. Learn more, including how to control cookies.

Got It!

Advertisements

Arrays

For those that have never worked with arrays here’s a great way to understand them: If a variable is a piece of paper then the stack of papers is an array. It’s a list of variables or objects, and every programming/scripting language has ways to store these variables or objects linearly so you can access them later via a number of different methods.

So let’s look at how we can create an array of string objects in powershell:

$array = @("test1", "test2", "test3")$array

You can also add an element to the end of an array:

$array = @("test1", "test2", "test3")$array += "test4"$array

También puedes añadir arrays juntos:

$array = @("test1", "test2", "test3")$array2 = @("test4", "test5")$array = $array + $array2$array

Puedes acceder a un elemento de un array si conoces el número de índice del elemento que quieres. Los arrays están indexados por números enteros que empiezan por 0. Esto se puede ver con el siguiente código:

$array = @("test1", "test2", "test3")"First array value: " + $array"Second array value: " + $array"Third array value: " + $array

En este punto puedes usar ese elemento como si fuera una variable normal. Dado que nuestro array es un array de cadenas podemos utilizar funciones de cadena como si se tratara de una variable regular establecida a ese valor de cadena cuando llamamos al elemento de este array. por ejemplo:

$array = @("test1", "test2", "test3")$array.ToUpper()

Bucles for

También se puede acceder a los arrays de forma lineal mediante la ayuda de los bucles for. Un bucle for generalmente tiene 3 bits de información en su declaración:

  1. Inicialización
  2. Condición para continuar el bucle
  3. Una ocurrencia de repetición – Esto se utiliza generalmente para acercar su bucle a no cumplir la condición para usted bucle para que el bucle finalmente terminará.
  4. Esto se ve mejor mirando un bucle simple. Lo siguiente se inicializará estableciendo $i en 1. Luego probará que $i es menor que 6 e incrementará $i en uno en cada pasada del bucle:

    for ($i=1;$i -lt 6; $i++) {"This is line number " + $i}

    En el ejemplo anterior usamos el operador de comparación -lt para probar que el valor de $i es menor que 6. Hay muchos otros operadores de comparación disponibles como -gt (mayor que), -le (menor o igual que), -ge (mayor o igual que), -eq (igual) y -ne (no igual). Para conocer los operadores de comparación disponibles puedes utilizar el siguiente comando:

    help about_comparison_operators

    Bucles For con Arrays

    Es fácil ver cómo se puede aplicar un bucle a un array para iterar a través de cada elemento del array en orden si sólo hubiera una forma de comprobar cuántos elementos hay en el array. Podemos hacerlo utilizando un miembro del objeto array llamado Length. Lo que hay que tener en cuenta aquí es que quieres inicializar tu variable índice con 0 ya que es el primer elemento de tu array, pero quieres comprobar que tu índice es menor que la longitud del array ya que el último elemento del array será uno menos que el número de elementos del array. Este es el proceso en la práctica:

    $array = @("test1", "test2", "test3")for ($i=0; $i -lt $array.length; $i++) {$array}

    Una forma aún más rápida de hacer un bucle for es utilizando un bucle foreach especial. El bucle foreach establecerá una variable a cada elemento de una lista con una construcción mucho más simple:

    $array = @("test1", "test2", "test3")foreach ($element in $array) {$element}

    La última cosa a tener en cuenta con el bucle foreach es que se puede acceder a través de la tubería. El foreach que se utiliza en el pipeline es en realidad un alias de ForEach-Object. El uso de la tubería de esta manera es una forma más rápida de escribir un foreach, pero puede incurrir en cierta sobrecarga cuando se trata de grandes conjuntos de datos. Cuando usas foreach a través del pipeline se te da una variable especial para representar el elemento en tu bloque de código, $_:

    $array = ("test1", "test2", "test3")$array |foreach {$_}

    Ya hemos visto el bucle foreach en acción en el pipeline durante la Parte 2 de esta serie cuando vimos cómo leer archivos. Aquí hay un fragmento de ese código para que puedas ver cómo un cmdlet puede pasar una lista a través de un bucle foreach:

    Get-Content dictionary.txt | foreach {$_.toupper()}

    Las listas y los arrays son muy importantes para la programación y el scripting. Rara vez hay un script que no utilice un array o una lista de una forma u otra. Armed with this knowledge you can start looping away. We’ll be touching on regular expressions in the next tutorial. Until next time…

    Advertisements

Deja un comentario