Добавить пользовательский формат в Powershell SDK без использования SnapIn

Я разрабатываю приложение .NET/C# 2.0, которое использует PowerShell SDK для выполнения скрипта. Я не использую SnapIns. Я настраиваю все непосредственно через RunspaceConfiguration PS.

Итак, моя проблема в том, что я не могу добавить собственный формат для моего типа Plux.ExtensionTypeInfo, реализованного в приложении.

( Plux.ExtensionTypeInfo имеет свойство Name )

Вот что я пытаюсь:

...
RunspaceConfiguration config = RunspaceConfiguration.Create();

config.Formats.Prepend(
    new FormatConfigurationEntry("plux.format.ps1xml")
    );

config.Formats.Update();
...

плюкс.формат.ps1xml:

<Configuration>
  <ViewDefinitions>
  <View>
       <Name>Plux.ExtensionTypeInfo</Name>
            <ViewSelectedBy>
                <TypeName>Plux.ExtensionTypeInfo</TypeName>
            </ViewSelectedBy>
            <TableControl>
                <TableHeaders>
                    <TableColumnHeader>
                        <Width>30</Width>
                    </TableColumnHeader>
                </TableHeaders>
                <TableRowEntries>
                    <TableRowEntry>
                        <TableColumnItems>
                            <TableColumnItem>
                                <PropertyName>Name</PropertyName>
                            </TableColumnItem>
                        </TableColumnItems>
                    </TableRowEntry>
                </TableRowEntries>
            </TableControl>
        </View>
</ViewDefinitions>
</Configuration>

После выполнения командлета, который возвращает несколько объектов ExtensionTypeInfo, вывод никогда не будет отформатирован.

Со встроенными командлетами и типами форматирование отлично работает в моем приложении PS Host. Регистрация командлета также отлично работает через объект config. При запуске update-formatdata в plux.format.ps1xml с помощью powershell.exe или моего приложения для размещения ошибок не возникает.

Тем не менее, приведенный выше код не влияет на форматирование.


person Community    schedule 12.05.2009    source источник


Ответы (1)


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

Форматирование вывода происходит с помощью командлета Out-Default на узле PowerShell или путем вызова Format-Table или Format-List для указания формата.

ИЗМЕНИТЬ:

Мое предложение состояло бы в том, чтобы запустить это в пространстве выполнения.

YourCommand | Format-Table Name | Out-String

Кроме того, я надеюсь, что вы не пытаетесь разобрать этот вывод.

person JasonMArcher    schedule 13.05.2009
comment
(Извините за поздний ответ, меня не было на работе) Да, я действительно добавляю исходную строку к каждому конвейеру перед выполнением. Таким образом, форматирование по умолчанию работает довольно хорошо. - person ; 19.05.2009