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 😉