如何通过 c# cmdlet 在 PowerShell 中显示带有 .ps1xml 文件的嵌套对象

本文关键字:ps1xml 文件 对象 嵌套 显示 何通过 cmdlet PowerShell | 更新日期: 2023-09-27 18:30:48

嗨,我有分层对象结构,例如

   public class Department
   {
      public Guid ID {get; set;}
      public string Name{get; set;}
   }
   public class Employee
   {
      public Guid ID {get; set;}
      public string Name{get; set;}
      public Department Department {get;set;}
   }

我创建了一个格式化的输出.ps1xml文件,以在PowerShell中显示员工对象

<?xml version="1.0" encoding="utf-8" ?>
<Configuration>
 <ViewDefinitions>
  <View>
        <Name>EmpView</Name>
    <ViewSelectedBy>
      <TypeName>Employee</TypeName>
    </ViewSelectedBy>
  <TableControl>
    <TableHeaders>
      <TableColumnHeader>
        <Width>16</Width>
      </TableColumnHeader>
      <TableColumnHeader>
        <Width>16</Width>
      </TableColumnHeader>
      <TableColumnHeader/>
    </TableHeaders>
    <TableRowEntries>
      <TableRowEntry>
        <TableColumnItems>
          <TableColumnItem>
            <PropertyName>ID</PropertyName>
          </TableColumnItem>
          <TableColumnItem>
            <PropertyName>Name</PropertyName>
          </TableColumnItem>
          <TableColumnItem>
            <PropertyName>Department.Name</PropertyName>
          </TableColumnItem>
        </TableColumnItems>
      </TableRowEntry>
    </TableRowEntries>
  </TableControl>
 </View>
 </ViewDefinitions>
</Configuration>

我已经在PS中使用以下cmdlet注册了我的XML文件

update-formatdata -prependpath c:'formatedoutput.ps1xml
它显示

表格输出,它显示员工ID和姓名,但不显示部门名称。

我认为这是因为它在嵌套对象中

任何人都可以帮我显示部门名称吗

如何通过 c# cmdlet 在 PowerShell 中显示带有 .ps1xml 文件的嵌套对象

我遇到了类似的问题,来到了这个博客。对我来说,情况通过如下所示的简单更改得到解决 - 使用 ScriptBlock 而不是 PropertyName 标签,当然,确保调试窗口中的值不为 null:

<TableColumnItem>
    <ScriptBlock>$_.Department.Name</ScriptBlock>
</TableColumnItem>