2009-05-12 3 views
0

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

Итак, моя проблема заключается в том, что я не могу добавить пользовательский формат для моего типа 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> 

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

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

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

ответ

0

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

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

EDIT:

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

YourCommand | Format-Table Name | Out-String 

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

+0

(Извините за поздний ответ, я был вне офиса) Да, я действительно добавляю строку для каждого конвейера перед выполнением. Поэтому форматирование по умолчанию работает очень хорошо. – 2009-05-19 07:42:30