[PowerShell] Devolver un array vacío desde una función

Esto es un truco rápido muy chorra pero que puede volver loco a más de un desarrollador que no esté acostumbrado a las peculiaridades de PowerShell. Tomando este código como ejemplo:

function Get-EmptyArray {
 [System.Collections.ArrayList]$anyArray = @()
 return $anyArray 
}

Write-Host (Get-EmptyArray).GetType()

En principio podría resultar bastante evidente que el resultado de la ejecución será ver por pantalla la cadena “System.Collections.Arraylist”. Pues no, el resultado será un error como una casa del estilo de “You cannot call a method on a null-valued expression

La explicación de este funcionamiento tiene que ver con la forma que tiene PowerShell de gestionar qué se retorna en una función y creo que da para otro minipost. Como el objetivo en este caso es saber la solución, el truco es sencillo:

function Get-EmptyArray {
 [System.Collections.ArrayList]$anyArray = @()
 return ,$anyArray 
}

Write-Host (Get-EmptyArray).GetType()

Por si la diferencia no se aprecia, el truco es poner una coma delante de la variable $anyArray cuando se hace el return. Fácil, sencillo y feo, pero funciona 😉

Modesto San Juan

Desarrollo software e intento hacerlo bien