2

我使用这篇文章编写了我的第一个自己的 Powershell Cmdlet 和 Snapin。它工作正常。

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

<?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 时,会显示对象的所有属性。

我究竟做错了什么?

4

1 回答 1

2

一切看起来都是正确的,只是我不确定在没有定义列标题标签的情况下它的行为方式。尝试添加这个节点而不是你的空节点:

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

MyFormatFilename.ps1xml当通过 Add-PSSnapin 加载文件时,还要确保该文件与 snapin 位于同一目录中。此外,可能是废话,但请仔细检查<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并仔细检查格式文件的内容。确保它与您注册管理单元的目录相同。

于 2010-07-29T15:11:20.250 回答