Aceleradores de tipo PowerShell: PSObject vs PSCustomObject

En PowerShell v3.0PSCustomObject Fue presentado. Es comoPSObject, pero mejor. Entre otras mejoras (por ejemplo, el orden de la propiedad que se conserva), se simplifica la creación de objetos desde la tabla hash:

[PSCustomObject]@{one=1; two=2;}

Ahora parece obvio que esta afirmación:

[System.Management.Automation.PSCustomObject]@{one=1; two=2;}

funcionaría de la misma manera, porquePSCustomObject es un "alias" para el espacio de nombres completo + nombre de clase. En cambio me sale un error:

No se puede convertir el valor "System.Collections.Hashtable" del tipo "System.Collections.Hashtable" al tipo "System.Management.Automation.PSCustomObject".

Enumeré los aceleradores para ambos tipos de objetos:

[accelerators]::get.GetEnumerator() | where key -Like ps*object

    Key            Value
    ---            -----
    psobject       System.Management.Automation.PSObject
    pscustomobject System.Management.Automation.PSObject

y descubrí que ambos hacen referencia a lo mismoPSObject clase: esto tiene que significar que usar aceleradores puede hacer muchas otras cosas además de acortar el código.

Mis preguntas sobre este tema son:

¿Tiene algunos ejemplos interesantes de diferencias entre usar un acelerador y usar el nombre completo?¿Debería evitarse el uso del nombre de tipo completo siempre que haya un acelerador disponible como práctica recomendada general?¿Cómo verificar, quizás usando la reflexión, si un acelerador hace otras cosas que solo señalar la clase subyacente?

Respuestas a la pregunta(2)

Su respuesta a la pregunta