Búsqueda de sitios web

[Solucionado] No se puede indexar en una matriz nula en PowerShell


Si encuentra el mensaje de error No se puede indexar en una matriz nula en PowerShell, esto indica que está intentando acceder a un índice de una matriz que no existe o que aún no se ha inicializado. Este error también puede ocurrir si accede a la matriz configurada en $null. Reproduzcamos el error antes de sumergirnos en las soluciones.

Error de reproducción

Acceda al elemento de una matriz en el índice 0, que aún no se ha inicializado, para reproducir un error que indica que no puede indexarse en una matriz nula.

Error de reproducción:

$myArray
$myArray[0] 

Producción :

It cannot index into a null array.
At line:2 char:1
+ $myArray[0]
+ ~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : NullArray

Posibles formas de corregir el error

Para corregir el error, inicialice la matriz antes de acceder a sus elementos o verifique si la matriz está vacía o no. Utilice los siguientes métodos para resolver No se puede indexar en una matriz nula en PowerShell.

  1. Verifique la longitud de la matriz
  2. Usando la sintaxis @()
  3. Usando el comando Nuevo-Objeto
  4. Usando una lista separada por comas
  5. Usando la clase System.Collections.ArrayList
  6. Usando el método InitializeArray()

Verifique la longitud de la matriz

Para comprobar si una matriz está vacía, acceda a su propiedad de recuento, p. arr.count. Si el recuento es igual a 0, entonces la matriz está vacía. Si el recuento es mayor que 0, entonces la matriz no está vacía. Si comprobamos si la matriz está vacía antes de acceder a los elementos, podemos evitar este error.

Verifique la longitud de la matriz:

$array = @()
if ($array.count -eq 0){
    Write-Host "The array is empty."
}
else{
    Write-Host "The array is not empty.
}

Producción :

The array is empty.

Utilice la sintaxis @()

Utilice la sintaxis @() para crear e inicializar una matriz.

Utilice la sintaxis @():

$myArray = @("value1", "value2", "value3")
echo $myArray[0]

Producción :

value1

La matriz denominada $myarrayse crea con tres elementos. Los tres elementos de la matriz se inicializan en un valor de cadena, es decir, valor1, valor2 y valor3. La sintaxis @() crea una matriz vacía y luego agrega los valores especificados a la matriz usando comas entre cada valor. Después de eso, el valor en el índice 0 de $myArray se imprime en la consola usando el comando echo.

Utilice el comando Nuevo-Objeto

Utilice el cmdlet New-Object para crear una matriz e inicializar cada índice con un valor.

Utilice el comando Nuevo objeto:

$myArray = New-Object string[](3)
$myArray[0] = "Element 1"
$myArray[1] = "Element 2"
$myArray[2] = "Element 3"
echo $myArray[0]

Producción :

Element 1

En este enfoque, el comando New-Object se utiliza para crear una matriz denominada $myarray. Primero, el tipo se especifica como una cadena (como podría ser int) y el tamaño de la matriz se especifica en tres elementos. A continuación, los valores se inicializan utilizando la notación de índice de matriz. Finalmente, el elemento de la matriz en el índice 0 se muestra en la consola de PowerShell usando el comando echo.

Usar lista separada por comas

Utilice una lista separada por comas para inicializar una matriz en PowerShell.

Utilice la lista separada por comas:

$myArray = "value1", "value2", "value3"
echo $myArray[0]

Producción :

value1

Este enfoque crea la matriz con tres elementos e inicializa cada uno con un valor de cadena. Llamamos a esta matriz $myarray. A continuación, la lista de cadenas separadas por comas se asigna a la matriz. Los valores enteros o flotantes también se pueden dar a la matriz; en ese caso, no utilice comillas dobles para cada elemento. Por ejemplo, si desea crear una matriz de números enteros, escriba el código como $myArray=1, 2, 3, 4, 5. Después de crear la matriz, la instrucción echo imprime el elemento de la matriz en la consola de PowerShell.

Utilice la clase System.Collections.ArrayList

Utilice la clase System.Collections.ArrayList para crear e inicializar una ArrayList en PowerShell.

Utilice la clase System.Collections.ArrayList:

$myArray = New-Object System.Collections.ArrayList
$myArray.Add("value1") | Out-Null
$myArray.Add("value2") | Out-Null
echo $myArray[0]

Producción :

value1

Primero, la lista de matrices $myarray se crea utilizando New-Object System.Collections.ArrayList. Después de eso, se utiliza el método Add() para agregar los elementos a la matriz. A continuación, los elementos value1 y value2 se agregan al $myarray.

Luego, el método Add() redirigió la salida al cmdlet Out-Null para suprimir cualquier salida generada por el método Add(). Finalmente, el elemento en el índice 0 de la lista de matriz se imprime en la consola usando el comando echo.

Utilice la clase System.Array

Utilice la clase System.Array para crear e inicializar una matriz en PowerShell.

Utilice la clase System.Array:

$myArray = [System.Array]::CreateInstance([int], 3)
$myArray.Initialize()
echo $myArray[0]

Producción :

0

Primero, la matriz $myarray se crea usando System.Array. Luego, el método estático CreateInstance() crea una nueva instancia de una matriz. A continuación, el tipo de elementos y la longitud de la matriz se pasan como parámetro al método CreateInstance().

Para el ejemplo anterior, el tipo de elemento se especifica como entero ([int]) y la longitud de la matriz es 3. Después de eso, el método Initialize() inicializó la matriz con elementos 0.

Se trata de cómo solucionarlo. No se puede indexar en una matriz nula en PowerShell.

Artículos relacionados