Пользовательский PowerShell Snapin: пользовательский формат не работает - PullRequest
2 голосов
/ 29 июля 2010

Я использовал эту статью , чтобы написать свой первый командлет Powershell и 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>

и связал его в оснастке:

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

Но когда я установилSnapin с installutil, используйте Add-PSSnapin и вызовите мой командлет, все свойства объектов отображаются.

Что я делаю не так?

1 Ответ

2 голосов
/ 29 июля 2010

Все выглядит правильно, за исключением того, что я не уверен, как он ведет себя без определенной метки заголовка столбца. Попробуйте добавить этот узел вместо пустого:

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

Также убедитесь, что файл MyFormatFilename.ps1xml находится в том же каталоге, что и оснастка, когда он загружается через Add-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, а также дважды проверил содержимое файла формата. Убедитесь, что он находится в том же каталоге, из которого вы зарегистрировали оснастку.

...