2

この記事を使用して、最初のPowershellコマンドレットとSnapinを作成しました。そしてそれはうまくいきます。

ただし、4つのプロパティを持つ独自のデータクラスからオブジェクトのセットを返します。Powershellでは、デフォルトでこれらのプロパティの1つだけを表示する必要があります。そこで、記事のこの部分を使用して、この形式のファイルを作成しました。

<?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を使用してコマンドレットを呼び出すと、オブジェクトのすべてのプロパティが表示されます。

私は何が間違っているのですか?

4

1 に答える 1

2

列ヘッダーラベルが定義されていない場合の動作がわからないことを除いて、すべてが正しく見えます。空のノードの代わりにこのノードを追加してみてください。

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

また、MyFormatFilename.ps1xmlAdd-PSSnapinを介してファイルをロードするときは、ファイルがスナップインと同じディレクトリにあることを確認してください。また、おそらく当たり前ですが、<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 に答える