Cómo utilizar PowerShell Array - Guía completa
Las matrices PowerShell se utilizan para almacenar una colección de elementos. Son una parte fundamental de PowerShell, o de cualquier lenguaje de programación, porque permiten almacenar y estructurar una colección de elementos en una sola variable. Luego podemos usar la matriz para realizar una amplia gama de tareas en cada uno de los elementos de la matriz.
En este artículo, veremos PowerShell Array y cómo usarlos en sus scripts de PowerShell.
Matriz de PowerShell
Antes de ver cómo crear y usar matrices en PowerShell, primero veamos brevemente las ventajas de usar una matriz. Las matrices se utilizan en todos los lenguajes de programación. Le permiten realizar fácilmente tareas en varios elementos.
Por ejemplo, si desea crear un script que verifique si sus servidores están en línea. En lugar de escribir el código para cada servidor individual, puede crear una matriz con los nombres de los servidores o direcciones IP y recorrer cada elemento de la matriz.
Nota
Asegúrese de leer también este artículo sobre tablas hash y la diferencia entre matrices y tablas hash.
Las matrices también se pueden utilizar para ordenar o estructurar datos, lo que resulta especialmente útil cuando se trabaja con conjuntos de datos más grandes.
Creando matrices
La forma más sencilla y directa de crear una matriz en PowerShell es asignar varios elementos a una sola variable. Por ejemplo, si queremos crear una variedad de frutas, simplemente podemos hacer:
$fruits = 'apple','raspberry','kiwi'
# Result of $fruits:
apple
raspberry
kiwiUsando la notación @()
Una forma más común de definir o crear una matriz es utilizar la notación @(), también conocida como operador de subexpresión. Esto creará una matriz de los tiempos dentro del paréntesis ( ).
Por ejemplo, para crear una variedad de frutas:
$fruits = @('apple','raspberry','kiwi')Los resultados son los mismos que cuando asignaba varios elementos a una sola variable como en nuestro primer ejemplo. Pero también podemos usar este método para crear una matriz vacía, por ejemplo:
$data = @()
# Result
$data.Count
0Crear una matriz de PowerShell con un tipo específico
Las matrices en PowerShell pueden contener cualquier tipo de datos. Incluso es posible mezclar diferentes tipos de datos en una sola matriz. Por ejemplo, podemos crear una matriz que contenga números enteros, cadenas e incluso otra matriz:
$array = @('foo',3,'bar',50,@('apple','kiwi'))Como puede ver en la captura de pantalla anterior, la matriz contiene una cadena, un número entero y otra matriz.
Para evitar esto, podemos crear una matriz fuertemente tipada. Esto significa que definimos qué tipo de datos puede contener la matriz. Para crear una matriz escrita, debemos colocar el tipo de matriz entre corchetes antes de la variable.
Por ejemplo, para crear una matriz que sólo puede contener números enteros:
[int32[]]$ints = 10,50,30,20
Otras opciones de tipos de datos comúnmente utilizadas para matrices son:
- String[] - Crea una matriz de cadenas.
- Int[] - Se utiliza para crear una matriz de números enteros.
- Booleano[] - Matriz de valores booleanos (verdadero o falso).
- Byte[] - Se utiliza para crear una matriz de bytes.
- Double[] - Crea una matriz de números de punto flotante de doble precisión.
- Decimal[] - Esto se utiliza para crear una matriz de números decimales.
- DateTime[] - Se utiliza para crear una serie de fechas y horas.
- Objeto[] - Crea una matriz de objetos.
- Char[] - Esto se utiliza para crear una serie de caracteres.
- Array[] - Se utiliza para crear una matriz de matrices.
También es posible crear otros tipos de matrices, como tipos de objetos personalizados y clases específicas de .NET Framework, como Diagnostics.Process, por ejemplo.
Creando una matriz multidimensional
Una matriz multidimensional es una matriz que contiene otras matrices como elementos. Crear una matriz multidimensional en PowerShell es tan simple como crear una matriz y luego agregarle submatrices como elementos. Por ejemplo, para crear una matriz bidimensional:
# Create an empty 2-dimensional array
$myArray = @()
# Add sub-arrays as elements
$myArray += @(1,2,3),@(4,5,6),@(7,8,9)También podemos crear la matriz bidimensional con una sola línea, usando el operador de coma:
$myArray = @( (1,2,3), (4,5,6), (7,8,9) )Para acceder a los elementos de la matriz multidimensional necesitamos usar el índice de la primera matriz (principal) y la submatriz (anisada):
# Return the third element (2) of the second array (1):
$myArray[1][2]
# Returns
6Acceso y manipulación de elementos de matriz
Ahora que sabemos cómo crear una matriz, veamos cómo acceder y utilizar los datos dentro de las matrices.
Acceder a elementos utilizando el índice de matriz
Las matrices en PowerShell tienen un índice que siempre comienza en 0. Podemos usar este índice para recuperar elementos de la matriz, simplemente especificando el número de índice entre paréntesis. Para los ejemplos siguientes usaremos la siguiente matriz:
$fruits = @("Apple", "Banana", "Cherry", "Date", "Elderberry", "Fig", "Grape", "Honeydew", "Kiwi", "Lemon")Entonces, para acceder al primer elemento de la matriz, Apple, especificamos el número de índice 0:
$fruits[0]
# Result
AppleTambién podemos devolver varios elementos de la matriz ingresando varios números de índice:
$fruits[3,7,8]
# Result
Date
Honeydew
KiwiOtra opción es devolver una variedad de elementos de una matriz. Por ejemplo, podemos devolver los primeros 5 artículos usando:
$fruits[0..4]
# Result
Apple
Banana
Cherry
Date
Elderberry
La última opción que es bueno saber es que también puedes contar hacia atrás desde el índice. Entonces, para obtener el último elemento o los últimos 3 elementos de la matriz, podemos hacer:
$fruits[-1]
# Result
Lemon
$fruits[-1..-3]
#Result
Lemon
Kiwi
HoneydewRecorrer una matriz en PowerShell
La mayor ventaja de usar una matriz o tablas hash en PowerShell es que puede recorrer todos los elementos de una matriz. Esto le permite realizar las mismas acciones en todos los elementos de la matriz.
Nota
Asegúrese de leer también este artículo sobre For-Each, Do-While other loopts en PowerShell. Explicará la diferencia y los métodos más rápidos.
Existen diferentes métodos para recorrer una matriz, pero el método más sencillo es canalizar el cmdlet ForEach-Object detrás de la variable o utilizar el método .ForEach:
$fruits | ForEach-Object {"Fruit: $_"}
# Result
Fruit: Apple
Fruit: Banana
Fruit: Cherry
Fruit: Date
Fruit: Elderberry
Fruit: Fig
Fruit: Grape
Fruit: Honeydew
Fruit: Kiwi
Fruit: Lemon
# Or:
$fruits.ForEach({"Fruit: $_"})Cuando desee realizar un seguimiento de dónde se encuentra en la matriz, el bucle For es un buen método a utilizar. Este método realizará un seguimiento del número de índice donde se encuentra en la matriz:
for ($i = 0; $i -le ($fruits.length - 1); $i += 1) {
Write-Host "$($fruits[$i]) is located at index $i"
}Ordenar matriz de PowerShell
Podemos ordenar los elementos en una matriz usando el cmdlet Sort-Object. Esto ordenará todos los elementos de la matriz según su valor. De forma predeterminada, ordenará los elementos en orden alfabético. Por ejemplo, para ordenar la variedad de frutas podemos hacer:
$sortedFruits = $fruits | Sort-ObjectTambién podemos ordenar la matriz en orden descendente agregando el parámetro -Descending:
$sortedFruits = $fruits | Sort-Object -Descending
# Result
Lemon
Kiwi
Honeydew
Grape
Fig
Elderberry
Date
Cherry
BananaEs bueno saber que el cmdlet Sort-Object no modifica la matriz original, sino que devuelve una nueva matriz ordenada. Puede utilizar el parámetro -Unique para ordenar y eliminar elementos duplicados en la matriz.
Filtrar una matriz en PowerShell
Podemos usar el cmdlet Where-Object para filtrar una matriz en PowerShell. Devolverá solo el elemento que coincida con la condición del filtro en una nueva matriz. Por ejemplo, obtengamos todas las frutas que terminan en "rry":
$filteredFruits = $fruits | Where-Object {$_ -like "*rry"}
# result
Cherry
ElderberryPowerShell Agregar a la matriz
Para agregar elementos a una matriz necesitaremos usar el operador +=. Esto copiará el contenido de la matriz y le agregará los nuevos elementos. Por ejemplo, podemos agregar una nueva fruta a la matriz $fruits así:
$fruits += "Mango"O podemos agregar varios elementos a la matriz de esta manera:
$fruits += "Mango", "Nectarine", "Orange"Es bueno saber que técnicamente no se pueden agregar elementos a una matriz en PowerShell. Cuando creas una matriz, tendrá una longitud determinada. Y esa longitud es fija, por lo que no puedes agregarle ni quitarle elementos. Sin embargo, el operador += copia todo de la matriz existente y le agrega los nuevos elementos.
Algunos intentan usar el método .add() para agregar elementos a una matriz, pero solo puedes usar este método en una ArrayList.
Eliminar elementos de una matriz
Técnicamente no es posible eliminar elementos de una matriz, al igual que agregarlos. Entonces, para eliminar elementos de una matriz, necesitaremos crear una nueva matriz y filtrar el elemento que no queremos.
Por ejemplo, para eliminar Banana de la matriz $fruits, copiamos la matriz y usamos el cmdlet Where-Object para filtrar Banana:
$fruits = $fruits | Where-Object {$_ -ne "Banana"}Lista de matrices de PowerShell
Existe una mejor manera de agregar o eliminar elementos de una matriz. Para ello, necesitaremos utilizar PowerShell ArrayList, que está disponible en la clase 'System.Collections.ArrayList'. La ventaja de ArrayList en comparación con la matriz normal es que podemos agregar y eliminar elementos de la matriz, sin la necesidad de copiar la matriz primero. Esto realmente puede aumentar el rendimiento de su secuencia de comandos cuando trabaja con grandes conjuntos de datos.
Entonces, para crear una ArrayList en PowerShell necesitaremos usar el cmdlet New-Object para crear la matriz:
$arrayList = New-Object System.Collections.ArrayListAhora podemos usar el método .Add() para agregar elementos a ArrayList:
$arrayList.Add("Apple")
$arrayList.Add("Banana")Para eliminar elementos de ArrayList simplemente podemos usar el método .Remove():
$arrayList.Remove("Apple")Recuperar elementos de ArrayList es lo mismo que con una matriz normal. Puede utilizar el índice o recorrer todos los elementos de la matriz utilizando uno de los métodos de bucle.
Cmdlets de matriz integrados
Hay un par de cmdlets integrados que se pueden utilizar para realizar operaciones de matriz comunes. Estos cmdlets facilitan el trabajo con matrices y le permiten automatizar tareas. Algunos de los cmdlets de matriz integrados más utilizados en PowerShell son:
Unirse al operador
El operador de unión se utiliza para unir los elementos de una matriz en una sola cadena. Podemos especificar el separador entre los elementos, como un espacio o una coma. Por ejemplo, podemos unir los elementos del array $frutas en una sola cadena como esta:
$fruits -join ','
# Result
Apple,Cherry,Date,Elderberry,Fig,Grape,Honeydew,Kiwi,LemonOperador dividido
Podemos convertir una cadena en una matriz usando el operador de división. Al igual que con el operador de unión, podemos especificar el separador de los elementos, como un espacio o una coma. Entonces, por ejemplo, podemos dividir la cadena de frutas en una matriz como esta:
$fruits = "Apple,Banana,Cherry" -split ','Reemplazar operador
Para reemplazar un elemento, texto específico o caracteres en una matriz de PowerShell podemos usar el operador de reemplazo. El operador -replace es un operador de expresión regular que le permite buscar y reemplazar texto en la matriz.
Por ejemplo, para reemplazar Apple en la matriz de frutas con Mange podemos hacer lo siguiente:
$fruits = $fruits -replace "Apple","Mango"Tenga en cuenta que el operador -replace distingue entre mayúsculas y minúsculas; si desea que no distinga entre mayúsculas y minúsculas, debe utilizar el operador -ireplace.
El operador no se limita a reemplazar un solo elemento de una matriz. También puede reemplazar un carácter específico en todos los elementos de la matriz. Por ejemplo, para reemplazar "e" por "E":
$fruits = $fruits -replace "e","E"
# Result
ApplE
ChErry
DatE
EldErbErry
Fig
GrapE
HonEydEw
Kiwi
LEmonConcluyendo
Las matrices son una herramienta esencial para la programación y la automatización en PowerShell. Le permiten automatizar tareas repetitivas en su script y trabajar con grandes cantidades de datos de manera eficiente.
Espero que este artículo te haya resultado útil. Si tienes alguna pregunta, deja un comentario a continuación.
