[PowerShell] Ojo que no hay un único $null

Este es un ejemplo curioso de esos que me ha vuelto loco hasta que me he dado cuenta. Si parto de este código:

$item1 = Get-ChildItem | Where-Object {$_ -eq "no encuentras esto ni de coña"}
"item1 es nulo? {0}" -f ($null -eq $item1)
$item2 = $null
"item2 es nulo? {0}" -f ($null -eq $item2)

Al ejecutarlo el resultado es “True” en ambos casos. Vamos, que tanto item1 como item2 son $null. Hasta aquí todo bien. Ahora voy a ejecutar este código después del anterior:

$lista1 = @($item1)
"La lista 1 tiene una longitud de {0}" -f $lista1.Length
$lista2 = @($item2)
"La lista 2 tiene una longitud de {0}" -f $lista2.Length

En principio el resultado debería ser el mismo en ambos casos… o no. Al ejecutar este código el resultado será 0 para lista1 y 1 para lista2. Toma ya!

En caso de que sea necesario distinguir de qué tipo de $null se trata en cada caso, este código puede servir para salir de dudas:

$item1.PSObject -eq $null
$item2.PSObject -eq $null

En este caso, para item1 obtendremos un false y para item2 un true.

En fin, aquí queda otro WAT de PowerShell de esos que hacen que la vida sea más divertida 😉

Modesto San Juan

Desarrollo software e intento hacerlo bien