Aceleradores do tipo PowerShell: PSObject vs PSCustomObject

No PowerShell v3.0PSCustomObject foi introduzido. É comoPSObject, mas melhor. Entre outras melhorias (por exemplo, a ordem de propriedade sendo preservada), a criação de objetos a partir de hashtable é simplificada:

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

Agora parece óbvio que esta afirmação:

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

funcionaria da mesma maneira, porquePSCustomObject é um "alias" para espaço para nome completo + nome da classe. Em vez disso, recebo um erro:

Não é possível converter o valor "System.Collections.Hashtable" do tipo "System.Collections.Hashtable" para o tipo "System.Management.Automation.PSCustomObject".

Listei aceleradores para os dois tipos de objetos:

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

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

e descobriu que ambos referenciam o mesmoPSObject classe - isso significa que o uso de aceleradores pode fazer um monte de outras coisas além de apenas tornar o código mais curto.

Minhas perguntas sobre esse problema são:

Você tem alguns exemplos interessantes de diferenças entre o uso de um acelerador e o nome completo do tipo?O uso do nome completo deve ser evitado sempre que um acelerador estiver disponível como uma prática recomendada geral?Como verificar, talvez usando reflexão, se um acelerador faz outras coisas além de apenas apontar para a classe subjacente?

questionAnswers(2)

yourAnswerToTheQuestion