Bu küçük işlevi yazarsam:
function Foo {
Get-Process | % { $_ }
}
Ve eğer kaçarsam
Foo
Yalnızca küçük bir özellik alt kümesi görüntüler:
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
...
...
Ancak yalnızca 8 sütun gösterilse bile, (gösterildiği gibi) birçok başka özellik vardır foo | gm
.
Bu işlevin yalnızca bu 8 özelliği göstermesine neden olan nedir?
Aslında bir üçüncü parti. Net kütüphanesinden karmaşık nesneleri döndüren benzer bir işlev oluşturmaya çalışıyorum. Kütüphane, 2 seviyeli bir nesne hiyerarşisini düzleştiriyor:
function Actual {
$someDotnetObject.ACollectionProperty.ASecondLevelCollection | % { $_ }
}
Bu yöntem, nesneleri liste biçiminde (özellik başına bir satır) atar.
Asıl nesneyi kullanılabilir kılmak için neyin görüntülendiğini nasıl kontrol edebilirim ?
Bunu denedim:
function Actual {
$someDotnetObject.ACollectionProperty.ASecondLevelCollection | % { $_ } | format-table Property1, Property2
}
Konsolda beklenen tabloyu gösterir:
Property1 Property2
--------- ---------
ValA ValD
ValB ValE
ValC ValF
Ama eşyalarımı kaybettim. Get-Member
Sonuç üzerinde çalışan gösterir:
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;}
2. seviyedeki alt nesne üyelerini göstermek yerine. Bu durumda, sonucu bu tür bir argüman için bekleyen fonksiyonlara yönlendiremiyorum.
Powershell'in bu senaryoyu nasıl ele alması gerekiyor?