Se eu escrever esta pequena função:
function Foo {
Get-Process | % { $_ }
}
E se eu correr
Foo
Exibe apenas um pequeno subconjunto de propriedades:
PS C:\Users\Administrator> foo
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName
------- ------ ----- ----- ----- ------ -- -----------
86 10 1680 412 31 0,02 5916 alg
136 10 2772 2356 78 0,06 3684 atieclxx
123 7 1780 1040 33 0,03 668 atiesrxx
...
...
Mas, mesmo que apenas 8 colunas sejam exibidas, há muitas outras propriedades (como mostra foo | gm
).
O que está causando essa função para mostrar apenas estas 8 propriedades?
Na verdade, estou tentando construir uma função semelhante que está retornando objetos complexos de uma biblioteca de terceiros da Net. A biblioteca está nivelando uma hierarquia de 2 níveis de objetos:
function Actual {
$someDotnetObject.ACollectionProperty.ASecondLevelCollection | % { $_ }
}
Este método está descarregando os objetos em um formulário de lista (uma linha por propriedade).
Como posso controlar o que é exibido, mantendo o objeto real disponível ?
Eu tentei isso:
function Actual {
$someDotnetObject.ACollectionProperty.ASecondLevelCollection | % { $_ } | format-table Property1, Property2
}
Ele mostra em um console a tabela esperada:
Property1 Property2
--------- ---------
ValA ValD
ValB ValE
ValC ValF
Mas eu perdi meus objetos. A exibição de Get-Member
no resultado mostra:
TypeName: Microsoft.PowerShell.Commands.Internal.Format.FormatStartData
Name MemberType Definition
---- ---------- ----------
Equals Method bool Equals(System.Object obj)
GetHashCode Method int GetHashCode()
GetType Method type GetType()
ToString Method string ToString()
autosizeInfo Property Microsoft.PowerShell.Commands.Internal.Format.AutosizeInfo autosizeInfo {get;set;}
ClassId2e4f51ef21dd47e99d3c952918aff9cd Property System.String ClassId2e4f51ef21dd47e99d3c952918aff9cd {get;}
groupingEntry Property Microsoft.PowerShell.Commands.Internal.Format.GroupingEntry groupingEntry {get;set;}
pageFooterEntry Property Microsoft.PowerShell.Commands.Internal.Format.PageFooterEntry pageFooterEntry {get;set;}
pageHeaderEntry Property Microsoft.PowerShell.Commands.Internal.Format.PageHeaderEntry pageHeaderEntry {get;set;}
shapeInfo Property Microsoft.PowerShell.Commands.Internal.Format.ShapeInfo shapeInfo {get;set;}
TypeName: Microsoft.PowerShell.Commands.Internal.Format.GroupStartData
Name MemberType Definition
---- ---------- ----------
Equals Method bool Equals(System.Object obj)
GetHashCode Method int GetHashCode()
GetType Method type GetType()
ToString Method string ToString()
ClassId2e4f51ef21dd47e99d3c952918aff9cd Property System.String ClassId2e4f51ef21dd47e99d3c952918aff9cd {get;}
groupingEntry Property Microsoft.PowerShell.Commands.Internal.Format.GroupingEntry groupingEntry {get;set;}
shapeInfo Property Microsoft.PowerShell.Commands.Internal.Format.ShapeInfo shapeInfo {get;set;}
Em vez de mostrar os membros do objeto filho de 2º nível. Neste caso, não posso canalizar o resultado para funções que aguardam esse tipo de argumento.
Como o Powershell deve lidar com esse cenário?