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

发布于 2024-07-19 23:04:59 字数 1884 浏览 12 评论 0原文

我正在开发一个 .NET/C# 2.0 应用程序,它使用 PowerShell SDK 执行脚本。 我没有使用 SnapIn。 我直接通过 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 Host 应用程序中完美运行。 Cmdlet 注册也可以通过 config 对象正常工作。 使用 powershell.exe 或我的托管应用程序在 plux.format.ps1xml 上启动 update-formatdata 时,不会引发任何错误。

尽管如此,上面的代码对格式化没有影响。

I am developing a .NET/C# 2.0 application which uses the PowerShell SDK for script execution. I am not using SnapIns. I am setting everything directly through PS's RunspaceConfiguration.

So my problem is that I cannot add a custom format for my type Plux.ExtensionTypeInfo implemented in the application.

( Plux.ExtensionTypeInfo has a property called Name )

That is what I try:

...
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>

After executing a Cmdlet, which returns a few ExtensionTypeInfo objects, the output will never be formatted.

With the built in Cmdlets and Types, the formatting works perfectly in my PS Host application. The Cmdlet registration works also fine through the config object. When launching update-formatdata on plux.format.ps1xml, with powershell.exe or my hosting application, no errors are thrown.

Still, the code above has no effect on formatting.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

深爱不及久伴 2024-07-26 23:04:59

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

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

编辑:

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

YourCommand | Format-Table Name | Out-String

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

I haven't tried hosting the PowerShell runtime environment. But I am pretty sure that your issue is that the output formatting isn't happening because you are capturing the pipeline in your application, rather than in the PowerShell host.

Output formatting happens in the Out-Default cmdlet in the PowerShell host, or by calling Format-Table or Format-List to specify a format.

EDIT:

My suggestion would be to run this in the runspace.

YourCommand | Format-Table Name | Out-String

Also, I hope you aren't trying to parse this output.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文