Esta es una pregunta que recibo con bastante frecuencia, así que pensé en escribir un artículo sobre ella. Como el título indica, mostraré cómo puede agregar o eliminar elementos a una matriz de PowerShell una vez que se ha creado.
matrices de PowerShell
comencemos con la definición de una matriz tal como proviene de la documentación de PowerShell:
una matriz es una estructura de datos que está diseñada para almacenar una colección de elementos., Los elementos pueden ser del mismo tipo o diferentes tipos.A partir de Windows PowerShell 3.0, una colección de cero o un objeto tiene algunas propiedades de matrices.
crear una matriz en PowerShell es realmente simple y probablemente ya lo hizo cuando, por ejemplo, obtuvo una lista de usuarios de Active Directory
$adUsers = Get-AdUser -Filter '*' -Server $adDomainController
lo anterior devolverá una matriz de objetos AD que contengan todos los usuarios que coincidan con el filtro utilizado.,
Por supuesto, puede inicializar un array vacío con la siguiente sintaxis
$myArray = @()# Specify object type$myArray = @()
lo anterior inicializará un array vacío que podemos, por ejemplo, rellenar con una consulta AD o agregar elementos estáticos como este
$myArray = (1,2,3,4,5)
lo anterior agregará elementos del 1 al 5 al objeto myArray instanciando un nuevo objeto con una longitud de 5
PowerShell agregar elementos a un array
hemos visto cómo crear y asignar valores a un array pero ¿qué pasa si queremos agregar un sexto elemento a myArray?, Si intenta la siguiente
$myArray.Add(6)
se producirá con la siguiente excepción
por encima de excepción es lanzada como un PowerShell matriz es una colección de tamaño fijo y el error está diciendo simplemente que, no puede ser extendido.,
una solución común es usar el operador += como por ejemplo
$myArray += 6# Print array's length$myArray.length6
Cuando se usa el operador += lo que sucede bajo el capó es
- PowerShell crea un nuevo array con los mismos elementos que el anterior más el nuevo elemento
- PowerShell sobrescribirá el array existente con el nuevo contenido
todo esto es transparente para el usuario, por lo que no verá ninguna diferencia.,
agregar elementos a una matriz – ingrese ArrayList
si desea evitar todos los datos de copia/movimiento, puede crear una instancia de myArray como una ArrayList que es dinámica y le permitirá agregar eliminar elementos sobre la marcha
de manera similar, puede eliminar elementos de una ArrayList como esta
# Will corresponding item by index$myArrayList.RemoveAt(1)
nota: el método Remove aceptará el valor del elemento, por lo que 1 en el ejemplo anterior se refiere al valor no al índice del elemento.,
Cast to to suppress Add method printing new array’s length
Create Array List la forma alternativa
el ejemplo anterior llamará al método New-Object para crear una instancia de una nueva ArrayList, pero esto es relativamente caro en términos de recursos informáticos, por lo que lo anterior se puede reescribir como
$myArray = @()
Además de ser más corto, tiene el beneficio adicional de evitar el impacto negativo del rendimiento de New-Object y optimizar el código siempre es una buena idea, especialmente cuando se trata de scripts más grandes.,34f072bc0″>
notas de cierre
al escribir código, a pesar de no ser requerido por PowerShell, intento declarar siempre el tipo del objeto ya que es útil conocer, en cualquier momento, las propiedades y métodos soportados por el objeto, por lo que siempre escribo
$myString = 'Some Text'
en lugar de
$myString = 'Some Text'
esto no es requerido por PowerShell, pero encuentro que ayuda a la legibilidad del código y simplifica el trabajo con un objeto declarado 800/900 líneas en el código sin tener que volver a la declaración de la variable.,
Leave a Reply