Algunas notas generales.
$obj | Select-Object ⊆ $obj | Select-Object -Property *
Este último mostrará todas las propiedades no intrínsecas y no generadas por el compilador. El primero no parece (siempre) mostrar todos los tipos de propiedad (en mis pruebas, parece mostrar la CodeProperty MemberTypecoherencia, aunque no hay garantías aquí).
Algunos cambios a tener en cuenta para Get-Member
Get-Memberno no conseguir que los miembros estáticos de forma predeterminada. Tampoco puede (directamente) llevarlos junto con los miembros no estáticos. Es decir, el uso del conmutador hace que solo se devuelvan miembros estáticos:
PS Y:\Power> $obj | Get-Member -Static
TypeName: System.IsFire.TurnUpProtocol
Name MemberType Definition
---- ---------- ----------
Equals Method static bool Equals(System.Object objA, System.Object objB)
...
Utilice el -Force.
El Get-Membercomando usa el parámetro Force para agregar los miembros intrínsecos y los miembros generados por el compilador de los objetos a la pantalla. Get-Memberobtiene estos miembros, pero los oculta de forma predeterminada.
PS Y:\Power> $obj | Get-Member -Static
TypeName: System.IsFire.TurnUpProtocol
Name MemberType Definition
---- ---------- ----------
...
pstypenames CodeProperty System.Collections.ObjectModel.Collection...
psadapted MemberSet psadapted {AccessRightType, AccessRuleType,...
...
Úselo ConvertTo-Jsonpara una "serialización" legible y profunda
Yo no necesarias objetos recomiendan ahorrar utilizando JSON (uso Export-Clixmlen su lugar). Sin embargo, puede obtener una salida más o menos legible de ConvertTo-Json, que también le permite especificar la profundidad.
Tenga en cuenta que no especificar Depthimplica-Depth 2
PS Y:\Power> ConvertTo-Json $obj -Depth 1
{
"AllowSystemOverload": true,
"AllowLifeToGetInTheWay": false,
"CantAnyMore": true,
"LastResortOnly": true,
...
Y si no planea leerlo, puede -Compresshacerlo (es decir, quitar los espacios en blanco)
PS Y:\Power> ConvertTo-Json $obj -Depth 420 -Compress
Úselo -InputObjectsi puede (y está dispuesto)
El 99,9% de las veces cuando se usa PowerShell: o el rendimiento no importará o no le importa el rendimiento. Sin embargo , debe tenerse en cuenta que evitar la tubería cuando no la necesita puede ahorrar algunos gastos generales y agregar algo de velocidad (la tubería, en general, no es muy eficiente).
Es decir, si todo lo que tiene es un solo $objútil para imprimir (y no es tan vago como yo a veces para escribir -InputObject):
# select is aliased (hardcoded) to Select-Object
PS Y:\Power> select -Property * -InputObject $obj
# gm is aliased (hardcoded) to Get-Member
PS Y:\Power> gm -Force -InputObject $obj
Advertencia para Get-Member -InputObject:
si $ obj es una colección (por ejemplo System.Object[]), terminará obteniendo información sobre el objeto de la colección en sí:
PS Y:\Power> gm -InputObject $obj,$obj2
TypeName: System.Object[]
Name MemberType Definition
---- ---------- ----------
Count AliasProperty Count = Length
...
Si lo desea Get-Memberpara cada uno TypeNameen la colección (NB para cada uno TypeName, no para cada objeto, una colección de N objetos con todos los mismos TypeNamesolo imprimirá 1 tabla para eso TypeName, no N tablas para cada objeto) ... solo quédate con la tubería directamente.
-Forceparámetro para que funcione, por ejemploWrite-Host ($obj | Format-List -Force | Out-String)