自定义PowerShell Snapin:自定义格式不起作用

时间:2010-07-29 14:06:31

标签: c# powershell powershell-v2.0 pssnapin

我用this article编写了我自己的第一个Powershell Cmdlet和Snapin。它工作正常。

但是我从我自己的数据类返回一组对象,它有四个属性,我希望Powershell默认只显示其中一个属性。所以我用this part of the article创建了这个格式文件:

<?xml version="1.0" encoding="utf-8" ?>
<Configuration>
    <ViewDefinitions>
        <View>
            <Name>RemoteFile</Name>
            <ViewSelectedBy>
                <TypeName>MyFullNamespace.RemoteFileData</TypeName>
            </ViewSelectedBy>
            <TableControl>
                <TableHeaders>
                    <TableColumnHeader />
                </TableHeaders>
                <TableRowEntries>
                    <TableRowEntry>
                        <TableColumnItems>
                            <TableColumnItem>
                                <PropertyName>Filename</PropertyName>
                            </TableColumnItem>
                        </TableColumnItems>
                    </TableRowEntry>
                </TableRowEntries>
            </TableControl>
        </View>
    </ViewDefinitions>
</Configuration>

并将其链接到Snapin:

    public override string[] Formats
    {
        get { return new string[] { "MyFormatFilename.ps1xml" }; }
    }

但是当我使用installutil安装Snapin时,使用Add-PSSnapin并调用我的Cmdlet,将显示所有对象的属性。

我做错了什么?

1 个答案:

答案 0 :(得分:2)

一切看起来都是正确的,除了我不确定它是如何表现的,没有定义列标题标签。尝试添加此节点而不是空节点:

<TableColumnHeader>
  <Label>FileName</Label>
</TableColumnHeader>

当通过Add-PSSnapin加载文件时,还要确保文件MyFormatFilename.ps1xml与snapin位于同一目录中。此外,可能是duh,但请仔细检查<TypeName>元素中指定的类型名称中的拼写错误。

更新:我尝试了上面列出的XML,它对我有用。我将它复制到Notepad2并保存到C:\ temp \ test.ps1xml然后执行:

1# $obj = new-object psobject
2# $obj.psobject.TypeNames.Insert(0, 'MyFullNamespace.RemoteFileData')
3# Add-Member -InputObject $obj -MemberType NoteProperty -Name Filename `
              -Value 'some-remotefile.txt'
4# Add-Member -InputObject $obj -MemberType NoteProperty -Name Dummy `
              -Value 'dummy prop'
5# $obj.psobject.TypeNames
MyFullNamespace.RemoteFileData
System.Management.Automation.PSCustomObject
System.Object
6# $obj

Filename                                                    Dummy
--------                                                    -----
some-remotefile.txt                                         dummy prop


7# Update-FormatData C:\temp\test.ps1xml
8# $obj

Filename
--------
some-remotefile.txt

我会仔细检查完整的类型名instance.GetType().FullName,并仔细检查格式文件的内容。确保它与你注册snapin的目录相同。