Powershell cmdlet输出中的嵌套对象和集合未显示

时间:2019-07-16 07:54:24

标签: c# powershell-module

我正在使用C#开发Powershell二进制模块。我发现嵌套的对象和集合未显示在控制台上。所有其他属性显示正确。我还没有从PSObjects派生输出类。它们是纯C#。它包含一堆属性,集合(列表和字典)和一个嵌套对象。嵌套对象仅显示类名称。列表仅显示第一个属性。

我尝试使用数组([])而不是列表,并将字典转换为名称,值属性类的集合,并将其显示为数组。

我希望扩展内部对象和列表中的对象。

1 个答案:

答案 0 :(得分:0)

PowerShell调用嵌套对象上的ToString()来显示它们。您可以使用派生属性(在Types.ps1xml文件中定义)或自定义格式(在Format.ps1xml中定义)文件)以暴露嵌套对象的某些属性以默认显示在控制台中,否则,PowerShell只会显示对象的展平版本,而不管该类名是(如果ToString()不被覆盖) )或您自己定义的任何内容。

例如,我正在使用同时使用Format.ps1xmlTypes.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引用了嵌套对象ObjectAObjectA覆盖ToString()以返回其自己的Name属性:

> Get-Objects

Name           Directory                ObjectA
----           ---------                -------
some-cool-name X:\some\random\directory objecta-name

有关Format.ps1xml的更多信息:https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_format.ps1xml

有关Types.ps1xml的更多信息:https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_types.ps1xml