在 Powershell SDK 中添加自定义格式而不使用 SnapIn
我正在开发一个 .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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我还没有尝试托管 PowerShell 运行时环境。 但我非常确定您的问题是输出格式化没有发生,因为您正在应用程序中捕获管道,而不是在 PowerShell 主机中。
输出格式化发生在 PowerShell 主机中的 Out-Default cmdlet 中,或者通过调用 Format-Table 或 Format-List 来指定格式。
编辑:
我的建议是在运行空间中运行它。
另外,我希望您不要尝试解析此输出。
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.
Also, I hope you aren't trying to parse this output.