You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell C#扩展:如何指定嵌套集合对象的默认显示属性

解决嵌套集合的PowerShell显示问题

方法一:在Cmdlet代码中动态配置显示规则

无需修改外部类,可在返回activity对象前,为每个person实例添加PSStandardMembers,指定其默认显示属性为Name,让PowerShell在渲染嵌套的participants集合时自动使用该属性。

修改后的ProcessRecord方法代码如下:

protected override void ProcessRecord()
{
    base.ProcessRecord();
    List<activity> activities = GetActivities();

    // 遍历所有活动的参与者,配置显示属性
    foreach (var act in activities)
    {
        if (act.participants == null) continue;
        
        foreach (var participant in act.participants)
        {
            // 创建默认显示属性集,指定Name为显示字段
            var defaultDisplaySet = new PSPropertySet(
                PSStandardMembers.DefaultDisplayPropertySet,
                new[] { "Name" });

            // 用PSObject包装外部类实例,添加格式化配置
            var psObj = PSObject.AsPSObject(participant);
            psObj.Properties.Add(
                new PSNoteProperty(
                    PSStandardMembers.DefaultDisplayPropertySet,
                    defaultDisplaySet));
        }
    }

    WriteObject(activities);
}

方法二:全局生效的自定义类型格式化文件

如果希望所有person类型对象在PowerShell中都默认显示Name,可创建.ps1xml格式化文件并注册到会话中:

  1. 创建Person.Format.ps1xml文件:
<?xml version="1.0" encoding="utf-8"?>
<Configuration>
  <ViewDefinitions>
    <View>
      <Name>thosepeskyexternalclasses.person</Name>
      <ViewSelectedBy>
        <TypeName>thosepeskyexternalclasses.person</TypeName>
      </ViewSelectedBy>
      <!-- 定义宽格式(集合中显示的样式) -->
      <WideControl>
        <WideEntries>
          <WideEntry>
            <WideItem>
              <PropertyName>Name</PropertyName>
            </WideItem>
          </WideEntry>
        </WideEntries>
      </WideControl>
      <!-- 可选:定义列表/表格视图的显示规则 -->
      <ListControl>
        <ListEntries>
          <ListEntry>
            <ListItems>
              <ListItem>
                <PropertyName>Name</PropertyName>
              </ListItem>
              <ListItem>
                <PropertyName>Id</PropertyName>
              </ListItem>
            </ListItems>
          </ListEntry>
        </ListEntries>
      </ListControl>
    </View>
  </ViewDefinitions>
</Configuration>
  1. 注册格式化文件:
    • 若为模块,在.psd1文件中添加配置:FormatsToProcess = @('Person.Format.ps1xml')
    • 手动注册执行:Update-FormatData -AppendPath .\Person.Format.ps1xml

两种方法的区别

  • 方法一仅对当前Cmdlet返回的对象生效,不会影响其他场景下的person对象显示;
  • 方法二为全局生效,所有该类型的对象都会遵循定义的显示规则。

内容的提问来源于stack exchange,提问作者William Holmes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 20:03:17