我已经为我的一个功能创建了一个新的自定义表输出,并希望有更好经验的人可以帮助解决我遇到的问题。
我为表中的某些项设置了一个列宽,希望它们可以在那个时候回转,但是在控制台窗口的宽度已经填满之前它们似乎没有这样做。然后它会在最后一列仅用于屏幕的情况下执行此操作。输出中将省略任何其他列。
这是我的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
希望我提供了足够的信息,但如果您需要了解更多信息,请告诉我。请告诉我,我做的事情很愚蠢。
谢谢