¿Por qué y cómo son diferentes estos dos valores $ nulos?

Aparentemente, en PowerShell (ver. 3) no todos$nullson iguales:

    >function emptyArray() { @() }
    >$l_t = @() ; $l_t.Count
0
    >$l_t1 = @(); $l_t1 -eq $null; $l_t1.count; $l_t1.gettype()
0
IsPublic IsSerial Name                                     BaseType                                                         
-------- -------- ----                                     --------                                                         
True     True     Object[]                                 System.Array                                                     
    >$l_t += $l_t1; $l_t.Count
0
    >$l_t += emptyArray; $l_t.Count
0
    >$l_t2 = emptyArray; $l_t2 -eq $null; $l_t2.Count; $l_t2.gettype()
True
0
You cannot call a method on a null-valued expression.
At line:1 char:38
+ $l_t2 = emptyArray; $l_t2 -eq $null; $l_t2.Count; $l_t2.gettype()
+                                      ~~~~~~~~~~~~~~~
  + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
  + FullyQualifiedErrorId : InvokeMethodOnNull
    >$l_t += $l_t2; $l_t.Count
0
    >$l_t3 = $null; $l_t3 -eq $null;$l_t3.gettype()
True
You cannot call a method on a null-valued expression.
At line:1 char:32
+ $l_t3 = $null; $l_t3 -eq $null;$l_t3.gettype()
+                                ~~~~~~~~~~~~~~~
  + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
  + FullyQualifiedErrorId : InvokeMethodOnNull
    >$l_t += $l_t3; $l_t.count
1
    >function addToArray($l_a, $l_b) { $l_a += $l_b; $l_a.count }
    >$l_t = @(); $l_t.Count
0
    >addToArray $l_t $l_t1
0
    >addToArray $l_t $l_t2
1

Entonces, ¿cómo y por qué es$l_t2 diferente de$l_t3? En particular, es$l_t2 De Verdad$null ¿o no? Tenga en cuenta que$l_t2 NO es una matriz vacía ($l_t1 es y$l_t1 -eq $null no devuelve nada, como se esperaba), pero tampoco es realmente$null, me gusta$l_t3. En particular,$l_t2.count devuelve 0 en lugar de un error y, además, agrega$l_t2 a$l_t se comporta como agregar una matriz vacía, no como agregar$null. Y porque$l_t2 de repente parece convertirse en "más$null"cuando se pasa en la funciónaddToArray como parámetro ???????

¿Alguien puede explicar este comportamiento o señalarme la documentación que lo explicaría?

Editar: La respuesta de PetSerAl a continuación es correcta.También encontré esta publicación stackOverflow sobre el mismo problema.

Información de la versión de Powershell:

    >$PSVersionTable
Name                           Value                                                                                        
----                           -----                                                                                        
WSManStackVersion              3.0                                                                                          
PSCompatibleVersions           {1.0, 2.0, 3.0}                                                                              
SerializationVersion           1.1.0.1                                                                                      
BuildVersion                   6.2.9200.16481                                                                               
PSVersion                      3.0                                                                                          
CLRVersion                     4.0.30319.1026                                                                               
PSRemotingProtocolVersion      2.2                                                                                          

Respuestas a la pregunta(3)

Su respuesta a la pregunta