代码之家  ›  专栏  ›  技术社区  ›  Hinek

自定义PowerShell管理单元:自定义格式不起作用

  •  2
  • Hinek  · 技术社区  · 16 年前

    我用过 this article 要编写我的第一个自己的PowerShell Cmdlet和管理单元。而且效果很好。

    但是我从我自己的数据类返回一组对象,它有四个属性,我希望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>
    

    并将其链接到管理单元中:

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

    但是,当我使用installUtil安装管理单元时,使用add-pssnapin并调用我的Cmdlet,将显示对象的所有属性。

    我做错什么了?

    1 回复  |  直到 15 年前
        1
  •  2
  •   Keith Hill    15 年前

    除了我不确定它在没有定义列标题标签的情况下的行为之外,一切看起来都是正确的。尝试添加此节点而不是空节点:

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

    还要确保文件 MyFormatFilename.ps1xml 在通过add pssnapin加载管理单元时与该管理单元位于同一目录中。另外,可能是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 并再次检查格式化文件的内容。确保它与您从中注册管理单元的目录相同。

    推荐文章