[英]Nested objects and collection in output of Powershell cmdlet not showing up
我正在使用C#開發Powershell二進制模塊。 我發現嵌套的對象和集合未顯示在控制台上。 所有其他屬性顯示正確。 我還沒有從PSObjects派生輸出類。 它們是純C#。 它包含一堆屬性,集合(列表和字典)和一個嵌套對象。 嵌套對象僅顯示類名稱。 列表僅顯示第一個屬性。
我嘗試使用數組([])而不是列表,並將字典轉換為名稱,值屬性類的集合,並將其顯示為數組。
我想擴展內部對象和列表中的對象。
PowerShell會在嵌套對象上調用ToString()
來顯示它們。 您可以使用派生屬性(在Types.ps1xml
文件中定義)或自定義格式(在Format.ps1xml
文件中定義)來公開嵌套對象的某些屬性,以默認在控制台中顯示,但否則PowerShell只會顯示一個對象的扁平化版本,無論是類名(如果未重寫ToString()
)還是您自己定義的任何版本。
例如,我在一個使用Format.ps1xml
和Types.ps1xml
文件來控制如何顯示類型的模塊上工作。 在Types.ps1xml
我們選擇默認的顯示屬性,還添加一個自定義屬性來重命名嵌套對象(針對匿名性進行了修改):
<?xml version="1.0" encoding="utf-8" ?>
<Types>
<Type>
<Name>ObjectA</Name>
<Members>
<MemberSet>
<Name>PSStandardMembers</Name>
<Members>
<PropertySet>
<Name>DefaultDisplayPropertySet</Name>
<ReferencedProperties>
<Name>ID</Name>
<Name>Name</Name>
<Name>Description</Name>
<Name>Metadata</Name>
</ReferencedProperties>
</PropertySet>
</Members>
</MemberSet>
<ScriptProperty>
<Name>ObjectSecrets</Name>
<GetScriptBlock>$this.Secrets.ToString()</GetScriptBlock>
</ScriptProperty>
</Members>
</Type>
<Type>
<Name>ObjectB</Name>
<Members>
<MemberSet>
<Name>PSStandardMembers</Name>
<Members>
<PropertySet>
<Name>DefaultDisplayPropertySet</Name>
<ReferencedProperties>
<Name>Name</Name>
<Name>ObjectA</Name>
<Name>Directory</Name>
</ReferencedProperties>
</PropertySet>
</Members>
</MemberSet>
</Members>
</Type>
</Types>
請注意, ObjectB
引用了嵌套對象ObjectA
。 ObjectA
覆蓋ToString()
以返回其自己的Name
屬性:
> Get-Objects
Name Directory ObjectA
---- --------- -------
some-cool-name X:\some\random\directory objecta-name
有關Format.ps1xml的更多信息: https ://docs.microsoft.com/zh-cn/powershell/module/microsoft.powershell.core/about/about_format.ps1xml
有關Types.ps1xml的更多信息: https ://docs.microsoft.com/zh-cn/powershell/module/microsoft.powershell.core/about/about_about_types.ps1xml
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.