我正在用C#构建一个Powershell提供程序。它为其子树中的项返回普通的C#对象。
默认情况下,所有属性都会显示在每个项目的垂直列表中,这很难看。因此,我需要指定显示属性,以允许对象正确地格式化。
根据this文章和this文章,为了在执行"dir"
时获取要显示的属性子集,需要创建“.format.ps1xml”文件在$pshome
目录中。我试图完全按照建议这样做,条目如下:
<Types>
<Type>
<Name>My.Namespace.Provider.Account</Name>
<Members>
<MemberSet>
<Name>PSStandardMembers</Name>
<Members>
<PropertySet>
<Name>DefaultDisplayPropertySet</Name>
<ReferencedProperties>
<Name>Name</Name>
</ReferencedProperties>
</PropertySet>
</Members>
</MemberSet>
</Members>
</Type>
...
然而,这对输出没有任何影响。这可能是一个配置错误,因此以下是我想到的所有问题:
文件是否必须位于$pshome
目录(我的计算机上为C:\Windows\System32\WindowsPowerShell\v1.0
)?该文件可以在别处生活吗?当我的.dll可以放在任何地方时,必须在WindowsPowerShell目录中安装它似乎是错误的。
该文件到底应该命名的是什么?我的c#提供程序的命名空间,c#类型,然后是[CmdletProvider]
属性中指定的提供程序名称。我已经尝试使用提供商名称,后跟.format.ps1xml
,但如上所述,它不起作用。
上面xml的Type
部分中提到的类型是我的提供程序返回的名称空间限定类型。这是对的吗?