如何在PowerShell中使用.ps1xml文件显示嵌套集合

7

我有一个类似这样的层次结构对象:

public class Department
{
    public string Name { get; set; }
    public string Manager { get; set; }
    public Employee[] Employees { get; set; }
}

public class Employee
{
    public string Name { get; set;}
    public string Speciallity { get; set; }
}

我该如何创建一个自定义的.ps1xml文件,以便按以下形式显示 Department(s)

    Department : Testers
    Manager    : P.H. Boss

Name                       Speciallity
----------                 -----------------------------
Some Employee              .Net
Another Employee           BizTalk
Yet Another                PowerShell
...                        ...


    Department : Developers
    Manager    : Wally

Name                       Speciallity
----------                 -----------------------------
Some Employee              .Net
Another Employee           BizTalk
Yet Another                PowerShell
...                        ...
我遇到的主要问题是如何定义一个基于TableControl的被选择的<View>项目,但它在表格控件中显示Department.Employees
我可以使用View完美地显示Employee(s)。
<View>
    <Name>Employee</Name>
    <ViewSelectedBy>
        <TypeName>Employee</TypeName>
    </ViewSelectedBy>
   <TableControl>
        <TableHeaders>
            <TableColumnHeader>
                <Label>Name</Label>
                <Width>30</Width>
            </TableColumnHeader>
            <TableColumnHeader>
                <Label>Speciallity</Label>
                <Width>50</Width>
            </TableColumnHeader>
        </TableHeaders>
        <TableRowEntries>
            <TableRowEntry>
                <Wrap/>
                <TableColumnItems>
                    <TableColumnItem>
                        <PropertyName>Name</PropertyName>
                    </TableColumnItem>
                    <TableColumnItem>
                        <PropertyName>Speciallity</PropertyName>
                    </TableColumnItem>
                </TableColumnItems>
            </TableRowEntry>
        </TableRowEntries>
    </TableControl>
</View>

我可以使用列表格式来格式化部门:

<View>
    <Name>TestResultSet</Name>
    <ViewSelectedBy>
        <TypeName>Department</TypeName>
    </ViewSelectedBy>
    <ListControl>
        <ListEntries>
            <ListEntry>
                <ListItems>
                    <ListItem>
                        <Label>Department</Label>
                        <PropertyName>Name</PropertyName>
                    </ListItem>
                    <ListItem>
                        <PropertyName>Manager</PropertyName>
                    </ListItem>
                </ListItems>
            </ListEntry>
        </ListEntries>
    </ListControl>
</View>

但是我如何在部门之后添加员工表格?


@GrahamGold :我注意到那个问题,但它没有涉及嵌套的“collection”。我认为这个区别足以证明需要一个单独的问题。不过我确实复制了那个问题中的一些示例代码 :) - oɔɯǝɹ
1
最终我在重复项中添加了一个PSParentPath NoteProperty,并根据该字段对输出进行了分组。似乎没有更好的方法。我会在这里更新一些演示代码供其他用户使用。 - oɔɯǝɹ
1个回答

1
我认为你需要使用 <GroupBy>...</GroupBy<Control><CustomControl>...</CustomControl></Control>。查看this的ps1xml格式文件,其中包含DiscUtils模块,我还没有机会自己尝试它,但它可能会让你走上正确的道路。另请参阅help about_Format.ps1xml,其中包含一些信息,但对某些方面的示例不够详细。

1
我使用<GroupBy>结构来解决此问题,但是我必须向Employee对象添加一个PSParentPath NoteProperty才能使其正常工作。我猜想没有其他方法可以实现这一点。 - oɔɯǝɹ

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接