在Powershell SDK中添加自定义格式,不使用SnapIn

时间:2009-05-12 13:35:04

标签: .net powershell sdk cmdlets

我正在开发一个.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对象的Cmdlet后,输出将永远不会被格式化。

使用内置的Cmdlet和类型,格式在我的PS主机应用程序中完美运行。通过 config 对象,Cmdlet注册也可以正常工作。使用powershell.exe或我的托管应用程序在 plux.format.ps1xml 上启动 update-formatdata 时,不会引发任何错误。

但是,上面的代码对格式化没有影响。

1 个答案:

答案 0 :(得分:0)

我还没有尝试过托管PowerShell运行时环境。但我很确定您的问题是输出格式没有发生,因为您正在应用程序中捕获管道,而不是在PowerShell主机中。

输出格式化在PowerShell主机的Out-Default cmdlet中进行,或者通过调用Format-Table或Format-List指定格式。

修改

我的建议是在运行空间中运行它。

YourCommand | Format-Table Name | Out-String

另外,我希望您不要尝试解析此输出。