Добавить пользовательский формат в Powershell SDK без использования SnapIn - PullRequest
0 голосов
/ 12 мая 2009

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

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

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

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

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

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

config.Formats.Update();
...

plux.format.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 или моим хост-приложением, никаких ошибок не выдается.

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

1 Ответ

0 голосов
/ 13 мая 2009

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

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

EDIT:

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

YourCommand | Format-Table Name | Out-String

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

...