如何强制format.ps1xml文件包装列?

问题描述 投票:0回答:1

我已经为我的一个功能创建了一个新的自定义表输出,并希望有更好经验的人可以帮助解决我遇到的问题。

我为表中的某些项设置了一个列宽,希望它们可以在那个时候回转,但是在控制台窗口的宽度已经填满之前它们似乎没有这样做。然后它会在最后一列仅用于屏幕的情况下执行此操作。输出中将省略任何其他列。

这是我的ps1xml摘录:

<View>
    <Name>L3Rule</Name>
    <ViewSelectedBy>
        <TypeName>Show.L3Rule</TypeName>
    </ViewSelectedBy>
    <GroupBy>
        <ScriptBlock>
            $_.Name
        </ScriptBlock>
        <CustomControlName>RuleGrouping</CustomControlName>
    </GroupBy>
    <TableControl>
        <AutoSize />
        <TableHeaders>
            <TableColumnHeader>
                <Label>ID</Label>
            </TableColumnHeader>
            <TableColumnHeader>
                <Label>Action</Label>
            </TableColumnHeader>
            <TableColumnHeader>
                <Width>30</Width>
                <Label>Source</Label>
            </TableColumnHeader>
            <TableColumnHeader>
                <Width>30</Width>
                <Label>Destination</Label>
            </TableColumnHeader>
            <TableColumnHeader>
                <Width>30</Width>
                <Label>Service</Label>
            </TableColumnHeader>
            <TableColumnHeader>
                <Label>Logged</Label>
            </TableColumnHeader>
            <TableColumnHeader>
                <Label>Tag</Label>
            </TableColumnHeader>
        </TableHeaders>
        <TableRowEntries>
            <TableRowEntry>
                <Wrap/>
                <TableColumnItems>
                    <TableColumnItem>
                        <PropertyName>ID</PropertyName>
                    </TableColumnItem>
                    <TableColumnItem>
                        <PropertyName>Action</PropertyName>
                    </TableColumnItem>
                    <TableColumnItem>
                        <ScriptBlock>
                            if ($_.Source -is [System.String]) { $_.Source }
                            else { $_.Source.Name -join "; " }
                        </ScriptBlock>
                    </TableColumnItem>
                    <TableColumnItem>
                        <ScriptBlock>
                            if ($_.Destination -is [System.String]) { $_.Destination }
                            else { $_.Destination.Name -join "; " }
                        </ScriptBlock>
                    </TableColumnItem>
                    <TableColumnItem>
                        <ScriptBlock>
                            if ($_.Service -is [System.String]) { $_.Service }
                            else { $_.Service.Name -join "; " }
                        </ScriptBlock>
                    </TableColumnItem>
                    <TableColumnItem>
                        <PropertyName>Logged</PropertyName>
                    </TableColumnItem>
                    <TableColumnItem>
                        <PropertyName>Tag</PropertyName>
                    </TableColumnItem>
                </TableColumnItems>
            </TableRowEntry>
        </TableRowEntries>
    </TableControl>
</View>

以下是输出示例:

     Rule: Inbound to blah


ID   Action Source      Destination Service             Logged Tag
--   ------ ------      ----------- -------             ------ ---
1111 allow  Somewhere   ANY         Service; Service    true   N/A


     Rule: Outbound to blah


ID   Action Source      Destination                             Service
--   ------ ------      -----------                             -------
2222 allow  Item1       Object1; AnotherObject1; MoreObjects    Service; Service (TCP); Service (TCP); Another
                                                                Service (TCP); This Service

正如您所看到的,它省略了最后两列,并且某些列大于指定的30个字符。如果它们按照我的预期包装,我想它,但我怀疑问题是它们只允许在行入口级别进行包装。

理想情况下,我可以在输出的项目上使用Out-String。我试过这样来显示这样的项目,但我认为这是强制列的默认宽度。 (我在DotNetTypes.format.ps1xml文件中看到类似的东西 - Line 3420)

     Rule: Inbound to blah


ID   Action Source      Destination Service             Logged Tag
--   ------ ------      ----------- -------             ------ ---
1111 allow  Somewhere   ANY         Service             true   N/A
                                    Service


     Rule: Outbound to blah


ID   Action Source Destination    Service               Logged Tag
--   ------ ------ -----------    -------               ------ ---
2222 allow  Item1  Object1        Service               true   N/A      
                   AnotherObject1 Service (TCP)
                   MoreObjects    Service (TCP)
                                  Another Service (TCP)
                                  This Service

希望我提供了足够的信息,但如果您需要了解更多信息,请告诉我。请告诉我,我做的事情很愚蠢。

谢谢

xml powershell output
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.