Как заставить файлы format.ps1xml обернуть столбцы? - PullRequest
0 голосов
/ 12 апреля 2019

Я создал новый пользовательский вывод таблицы для одной из моих функций и надеялся, что кто-то с большим опытом сможет помочь с обнаруженной проблемой.

У меня установлена ​​ширина столбца для определенных элементов в таблицев надежде, что они обернутся вокруг в этот момент, но, похоже, они этого не сделают, пока ширина окна консоли не заполнится.Затем он делает это для последнего столбца, который будет уходить только с экрана.Все остальные столбцы в выходных данных опущены.

Вот мой отрывок из 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 - строка 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

Надеюсь, я предоставил достаточно информации, но, пожалуйста, дайте мне знать, если вам нужно знать больше.Пожалуйста, скажите мне, что я делаю что-то глупое.

Спасибо

1 Ответ

0 голосов
/ 12 апреля 2019

Разобрался.Комбинация использования Out-String, установки всех размеров столбцов и удаления тега AutoSize очень помогла.

Если вы хотите добиться чего-то похожего и нашли эту страницу похожим разочарованным, вот какты делаешь это.

<View>
    <Name>L3Rule</Name>
    <ViewSelectedBy>
        <TypeName>Show.L3Rule</TypeName>
    </ViewSelectedBy>
    <GroupBy>
        <ScriptBlock>
            $_.Name
        </ScriptBlock>
        <CustomControlName>RuleGrouping</CustomControlName>
    </GroupBy>
    <TableControl>
        <TableHeaders>
            <TableColumnHeader>
                <Width>6</Width>
                <Label>ID</Label>
                <Alignment>Left</Alignment>
            </TableColumnHeader>
            <TableColumnHeader>
                <Width>8</Width>
                <Label>Action</Label>
                <Alignment>Left</Alignment>
            </TableColumnHeader>
            <TableColumnHeader>
                <Width>35</Width>
                <Label>Source</Label>
                <Alignment>Left</Alignment>
            </TableColumnHeader>
            <TableColumnHeader>
                <Width>35</Width>
                <Label>Destination</Label>
                <Alignment>Left</Alignment>
            </TableColumnHeader>
            <TableColumnHeader>
                <Width>18</Width>
                <Label>Service</Label>
                <Alignment>Left</Alignment>
            </TableColumnHeader>
            <TableColumnHeader>
                <Width>6</Width>
                <Label>Logged</Label>
                <Alignment>Left</Alignment>
            </TableColumnHeader>
            <TableColumnHeader>
                <Width>20</Width>
                <Label>Tag</Label>
                <Alignment>Left</Alignment>
            </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 | Out-String }
                        </ScriptBlock>
                    </TableColumnItem>
                    <TableColumnItem>
                        <ScriptBlock>
                            if ($_.Destination -is [System.String]) { $_.Destination }
                            else { $_.Destination.Name | Out-String }
                        </ScriptBlock>
                    </TableColumnItem>
                    <TableColumnItem>
                        <ScriptBlock>
                            if ($_.Service -is [System.String]) { $_.Service }
                            else { $_.Service.Name | Out-String }
                        </ScriptBlock>
                    </TableColumnItem>
                    <TableColumnItem>
                        <PropertyName>Logged</PropertyName>
                    </TableColumnItem>
                    <TableColumnItem>
                        <PropertyName>Tag</PropertyName>
                    </TableColumnItem>
                </TableColumnItems>
            </TableRowEntry>
        </TableRowEntries>
    </TableControl>
</View>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...