«Идиоматический» способ сделать это - вывести определенный тип объекта и затем определить данные форматирования для этого объекта.Объект может быть пользовательским (объект на основе C # / VB) или именованным объектом PSObject.Преимущество этого подхода заключается в том, что вы можете просто выводить эти объекты, и если нет дальнейшего конвейерного форматирования вывода (т.е. использования команды Format
), тогда вы определили форматирование вывода по умолчанию, которое будет использоваться.В противном случае одна из команд Format
может переопределить форматирование по умолчанию.Вот пример:
PS> $obj = new-object psobject -Property @{FName = 'John'; LName = 'Doe'; `
BirthDate = [DateTime]"5/7/1965"}
PS> $obj.psobject.TypeNames.Insert(0, "MyNamespace.MyCustomTypeName")
PS> $obj
BirthDate FName LName
--------- ----- -----
5/7/1965 12:00:00 AM John Doe
PS> Update-FormatData .\MyCustomFormatData.ps1xml
PS> $obj
FName LName BirthDate
----- ----- ---------
John Doe 5/7/1965 12:00:00 AM
Обратите внимание, как вывод по умолчанию отличается во второй раз, когда мы послали $obj
по трубе.Это потому, что он использовал пользовательские инструкции по форматированию, так как не было никаких явных команд форматирования.
Кстати, всегда существует конвейер даже для $obj
, потому что он неявно передается Out-Default
.
Вот определение пользовательского формата, определенное в файле .ps1xml
, который я назвал MyCustomFormatData.xml:
<Configuration>
<ViewDefinitions>
<View>
<Name>MyNamespace.MyCustomTypeName</Name>
<ViewSelectedBy>
<TypeName>MyNamespace.MyCustomTypeName</TypeName>
</ViewSelectedBy>
<TableControl>
<TableHeaders>
<TableColumnHeader>
<Label>FName</Label>
<Width>25</Width>
<Alignment>left</Alignment>
</TableColumnHeader>
<TableColumnHeader>
<Label>LName</Label>
<Width>25</Width>
<Alignment>left</Alignment>
</TableColumnHeader>
<TableColumnHeader>
<Label>BirthDate</Label>
<Width>25</Width>
<Alignment>left</Alignment>
</TableColumnHeader>
</TableHeaders>
<TableRowEntries>
<TableRowEntry>
<TableColumnItems>
<TableColumnItem>
<PropertyName>FName</PropertyName>
</TableColumnItem>
<TableColumnItem>
<PropertyName>LName</PropertyName>
</TableColumnItem>
<TableColumnItem>
<PropertyName>BirthDate</PropertyName>
</TableColumnItem>
</TableColumnItems>
</TableRowEntry>
</TableRowEntries>
</TableControl>
</View>
</ViewDefinitions>
</Configuration>
Дополнительные примеры форматирования пользовательских объектов см. В файлах.вывод этой команды:
Get-ChildItem $pshome\*.format.ps1xml