Сведения о Format.ps1xml
Краткое описание
Начиная с PowerShell 6 представления по умолчанию для объектов определяются в исходном коде PowerShell.
Вы можете создать собственные Format.ps1xml
файлы, чтобы изменить отображение объектов или определить отображение по умолчанию для новых типов объектов, создаваемых в PowerShell.
Подробное описание
Начиная с PowerShell 6 представления по умолчанию определяются в исходном коде PowerShell. Файлы Format.ps1xml
из PowerShell 5.1 и более ранних версий не существуют в PowerShell 6 и более поздних версиях.
Исходный код PowerShell определяет отображение объектов по умолчанию в консоли PowerShell. Вы можете создать собственные Format.ps1xml
файлы, чтобы изменить отображение объектов или определить отображение по умолчанию для новых типов объектов, создаваемых в PowerShell.
Когда PowerShell отображает объект, он использует данные в структурированных файлах форматирования для определения отображения объекта по умолчанию. Данные в файлах форматирования определяют, отображается ли объект в таблице или списке, а также определяет, какие свойства отображаются по умолчанию.
Форматирование влияет только на отображение. Это не влияет на то, какие свойства объекта передаются по конвейеру и как они передаются. Format.ps1xml
Файлы нельзя использовать для настройки формата выходных данных для хэш-таблиц.
Файл .ps1xml
форматирования может определять четыре различных представления каждого объекта:
- Таблица
- Список
- Широкий
- Особые настройки
Например, когда выходные данные Get-ChildItem
команды передаются Format-List
в команду, использует представление списка, определенное в исходном коде, Format-List
чтобы определить способ отображения файлов и папок в виде списка.
Если файл форматирования содержит несколько представлений объекта, PowerShell применяет первое найденное представление.
В пользовательском Format.ps1xml
файле представление определяется набором XML-тегов, которые описывают имя представления, тип объекта, к которому его можно применить, заголовки столбцов и свойства, отображаемые в тексте представления. Формат в Format.ps1xml
файлах применяется непосредственно перед представлением данных пользователю.
Создание файлов Format.ps1xml
Чтобы изменить формат отображения существующего представления объектов или добавить представления для новых объектов, создайте собственные Format.ps1xml
файлы, а затем добавьте их в сеанс PowerShell.
Чтобы создать Format.ps1xml
файл для определения пользовательского представления, используйте командлеты Get-FormatData и Export-FormatData . Используйте текстовый редактор для редактирования файла. Файл можно сохранить в любом каталоге, к которому имеет доступ PowerShell, например в подкаталоге $HOME
.
Чтобы изменить форматирование текущего представления, найдите представление в файле форматирования, а затем используйте теги для изменения представления. Чтобы создать представление для нового типа объекта, создайте новое представление или используйте существующее представление в качестве модели. Теги описаны в следующем разделе. Затем можно удалить все остальные представления в файле, чтобы изменения были очевидны для всех, кто изучает файл.
После сохранения изменений используйте Update-FormatData , чтобы добавить новый файл в сеанс PowerShell. Если вы хотите, чтобы представление пользовалось приоритетом над представлением, определенным во встроенных файлах, используйте параметр PrependPath . Update-FormatData
влияет только на текущий сеанс. Чтобы внести изменения во все будущие сеансы, добавьте команду в Update-FormatData
профиль PowerShell.
Пример. Добавление данных календаря в объекты языка и региональных параметров
В этом примере показано, как изменить форматирование объектов языка и региональных параметров System.Globalization.CultureInfo , созданных командлетом Get-Culture
в текущем сеансе PowerShell. Команды в примере добавляют свойство Calendar в табличное представление по умолчанию для отображения объектов языка и региональных параметров.
Для начала получите данные формата из файла исходного кода и создайте Format.ps1xml
файл, содержащий текущее представление объектов языка и региональных параметров.
Get-FormatData -TypeName System.Globalization.CultureInfo |
Export-FormatData -Path $HOME\Format\CultureInfo.Format.ps1xml
CultureInfo.Format.ps1xml
Откройте файл в любом XML-редакторе или текстовом редакторе, например Visual Studio Code. В следующем XML-коде определяются представления объекта CultureInfo .
Файл CultureInfo.Format.ps1xml
должен выглядеть следующим образом:
<?xml version="1.0" encoding="utf-8"?>
<Configuration>
<ViewDefinitions>
<View>
<Name>System.Globalization.CultureInfo</Name>
<ViewSelectedBy>
<TypeName>System.Globalization.CultureInfo</TypeName>
</ViewSelectedBy>
<TableControl>
<TableHeaders>
<TableColumnHeader>
<Width>16</Width>
</TableColumnHeader>
<TableColumnHeader>
<Width>16</Width>
</TableColumnHeader>
<TableColumnHeader />
</TableHeaders>
<TableRowEntries>
<TableRowEntry>
<TableColumnItems>
<TableColumnItem>
<PropertyName>LCID</PropertyName>
</TableColumnItem>
<TableColumnItem>
<PropertyName>Name</PropertyName>
</TableColumnItem>
<TableColumnItem>
<PropertyName>DisplayName</PropertyName>
</TableColumnItem>
</TableColumnItems>
</TableRowEntry>
</TableRowEntries>
</TableControl>
</View>
</ViewDefinitions>
</Configuration>
Create новый столбец для свойства Calendar, добавив новый набор тегов<TableColumnHeader>
. Значение свойства Calendar может быть длинным, поэтому укажите значение из 45 символов в <Width>
качестве значения .
<TableHeaders>
<TableColumnHeader>
<Width>16</Width>
</TableColumnHeader>
<TableColumnHeader>
<Width>16</Width>
</TableColumnHeader>
<TableColumnHeader>
<Width>45</Width>
</TableColumnHeader>
<TableColumnHeader/>
</TableHeaders>
Добавьте новый элемент столбца для календаря в строки таблицы с помощью тегов <TableColumnItem>
и <PropertyName
:
<TableRowEntries>
<TableRowEntry>
<TableColumnItems>
<TableColumnItem>
<PropertyName>LCID</PropertyName>
</TableColumnItem>
<TableColumnItem>
<PropertyName>Name</PropertyName>
</TableColumnItem>
<TableColumnItem>
<PropertyName>Calendar</PropertyName>
</TableColumnItem>
<TableColumnItem>
<PropertyName>DisplayName</PropertyName>
</TableColumnItem>
</TableColumnItems>
</TableRowEntry>
</TableRowEntries>
Сохраните файл и закройте его. Используйте для Update-FormatData
добавления нового файла форматирования в текущий сеанс PowerShell.
В этом примере используется параметр PrependPath для размещения нового файла в порядке более высокого приоритета, чем у исходного файла. Дополнительные сведения см. в разделе Update-FormatData.
Update-FormatData -PrependPath $HOME\Format\CultureInfo.Format.ps1xml
Чтобы проверить изменение, введите Get-Culture
и просмотрите выходные данные, которые содержат свойство Calendar .
Get-Culture
LCID Name Calendar DisplayName
---- ---- -------- -----------
1033 en-US System.Globalization.GregorianCalendar English (United States)
XML в файлах Format.ps1xml
Полное определение схемы можно найти в format.xsd в репозитории исходного кода PowerShell на сайте GitHub.
Раздел ViewDefinitions каждого Format.ps1xml
файла содержит теги, определяющие каждое <View>
представление. Типичный <View>
тег включает следующие теги:
<Name>
определяет имя представления.<ViewSelectedBy>
указывает тип объекта или типы, к которым применяется представление.<GroupBy>
указывает, как элементы в представлении будут объединяться в группы.<TableControl>
,<ListControl>
,<WideControl>
и<CustomControl>
содержат теги, указывающие способ отображения каждого элемента.
Тег ViewSelectedBy
Тег <ViewSelectedBy>
может содержать <TypeName>
тег для каждого типа объекта, к которому применяется представление. Кроме того, он может содержать <SelectionSetName>
тег, который ссылается на набор выбора, определенный в другом месте с помощью тега <SelectionSet>
.
Тег GroupBy
Тег <GroupBy>
содержит тег , указывающий <PropertyName>
свойство объекта, по которому сгруппированы элементы. Он также содержит либо тег, указывающий <Label>
строку, которая будет использоваться в качестве метки для каждой группы, либо тег, <CustomControlName>
ссылающийся на пользовательский элемент управления, определенный в другом месте с помощью тега <Control>
. Тег <Control>
содержит <Name>
тег и <CustomControl>
тег .
TableControlTag
Тег <TableControl>
обычно содержит <TableHeaders>
теги и <TableRowEntries>
, которые определяют форматирование для заголовков и строк таблицы. Тег <TableHeaders>
обычно содержит <TableColumnHeader>
теги , <Label>
<Width>
и <Alignment>
. Тег <TableRowEntries>
содержит <TableRowEntry>
теги для каждой строки в таблице. Тег <TableRowEntry>
содержит <TableColumnItems>
тег , содержащий <TableColumnItem>
тег для каждого столбца в строке. Как правило, тег содержит либо тег, определяющий <PropertyName>
свойство объекта, <TableColumnItem>
отображаемое в определенном расположении, либо <ScriptBlock>
тег, содержащий код скрипта, который вычисляет результат, который должен отображаться в расположении.
Примечание
Блоки скриптов также можно использовать в других местах, где могут быть полезны вычисляемые результаты.
Тег <TableColumnItem>
также может содержать тег , указывающий <FormatString>
способ отображения свойства или вычисляемых результатов.
Тег ListControl
Тег <ListControl>
обычно содержит <ListEntries>
тег . Тег <ListEntries>
содержит <ListEntry>
тег . Тег <ListEntry>
содержит <ListItems>
тег . Тег <ListItems>
содержит <ListItem>
теги, которые содержат <PropertyName>
теги. Теги <PropertyName>
указывают свойство объекта, которое будет отображаться в указанном расположении в списке. Если выбор представления определяется с помощью набора выделения, <ListControl>
теги и <ListEntry>
могут также содержать <EntrySelectedBy>
тег, содержащий один или несколько <TypeName>
тегов. Эти <TypeName>
теги указывают тип объекта, который <ListControl>
предназначен для отображения тега.
Тег WideControl
Тег <WideControl>
обычно содержит <WideEntries>
тег . Тег <WideEntries>
содержит один или несколько <WideEntry>
тегов. Тег <WideEntry>
обычно содержит тег , указывающий <PropertyName>
свойство, которое будет отображаться в указанном расположении в представлении. Тег <PropertyName>
может содержать <FormatString>
тег , указывающий способ отображения свойства.
Тег CustomControl
Тег <CustomControl>
позволяет использовать блок скрипта для определения формата. Тег <CustomControl>
обычно содержит <CustomEntries>
тег, содержащий несколько <CustomEntry>
тегов. Каждый <CustomEntry>
тег содержит <CustomItem>
тег, который может содержать различные теги, определяющие содержимое и форматирование указанного расположения в представлении, включая <Text>
теги , <Indentation>
, <ExpressionBinding>
и <NewLine>
.
Использование файла Трассировки Format.ps1xml
Чтобы обнаружить ошибки при загрузке или применении Format.ps1xml
файлов, используйте Trace-Command
командлет с любым из следующих компонентов формата в качестве значения параметра Name :
- FormatFileLoading
- FormatViewBinding
Дополнительные сведения см. в разделах Trace-Command и Get-TraceSource.
Подписывание файла Format.ps1xml
Чтобы защитить пользователей файла Format.ps1xml
, подпишите файл с помощью цифровой подписи. Дополнительные сведения см. в разделе about_Signing.
Пример XML для пользовательского представления Format-Table
В следующем примере XML создается пользовательское Format-Table
представление для объектов System.IO.DirectoryInfo и System.IO.FileInfo, созданных .Get-ChildItem
Пользовательское представление называется mygciview и добавляет столбец CreationTime в таблицу.
Чтобы создать пользовательское представление, используйте Get-FormatData
командлеты и Export-FormatData
для создания .ps1xml
файла. Затем измените .ps1xml
файл, чтобы создать код для пользовательского представления. Файл .ps1xml
может храниться в любом каталоге, к которому может получить доступ PowerShell. Например, подкаталог .$HOME
.ps1xml
После создания файла используйте Update-FormatData
командлет , чтобы включить представление в текущий сеанс PowerShell. Или добавьте команду update в профиль PowerShell, если нужно, чтобы представление было доступно во всех сеансах PowerShell.
В этом примере пользовательское представление должно использовать формат таблицы, в противном случае произойдет сбой Format-Table
.
Используйте Format-Table
с параметром View , чтобы указать имя пользовательского представления, mygciview и отформатировать выходные данные таблицы с помощью столбца CreationTime . Пример выполнения команды см. в разделе Format-Table.
Примечание
Хотя вы можете получить XML-код форматирования из исходного кода для создания пользовательского представления, для получения желаемого результата может потребоваться дополнительная разработка.
В следующей Get-FormatData
команде есть альтернатива параметру PowerShellVersion , чтобы гарантировать, что возвращаются все сведения о локальном форматировании. Используйте -PowerShellVersion $PSVersionTable.PSVersion
вместо конкретной версии PowerShell.
Get-FormatData -PowerShellVersion 5.1 -TypeName System.IO.DirectoryInfo |
Export-FormatData -Path ./Mygciview.Format.ps1xml
Update-FormatData -AppendPath ./Mygciview.Format.ps1xml
<?xml version="1.0" encoding="utf-8"?>
<Configuration>
<ViewDefinitions>
<View>
<Name>mygciview</Name>
<ViewSelectedBy>
<TypeName>System.IO.DirectoryInfo</TypeName>
<TypeName>System.IO.FileInfo</TypeName>
</ViewSelectedBy>
<GroupBy>
<PropertyName>PSParentPath</PropertyName>
</GroupBy>
<TableControl>
<TableHeaders>
<TableColumnHeader>
<Label>Mode</Label>
<Width>7</Width>
<Alignment>Left</Alignment>
</TableColumnHeader>
<TableColumnHeader>
<Label>LastWriteTime</Label>
<Width>26</Width>
<Alignment>Right</Alignment>
</TableColumnHeader>
<TableColumnHeader>
<Label>CreationTime</Label>
<Width>26</Width>
<Alignment>Right</Alignment>
</TableColumnHeader>
<TableColumnHeader>
<Label>Length</Label>
<Width>14</Width>
<Alignment>Right</Alignment>
</TableColumnHeader>
<TableColumnHeader>
<Label>Name</Label>
<Alignment>Left</Alignment>
</TableColumnHeader>
</TableHeaders>
<TableRowEntries>
<TableRowEntry>
<Wrap />
<TableColumnItems>
<TableColumnItem>
<PropertyName>ModeWithoutHardLink</PropertyName>
</TableColumnItem>
<TableColumnItem>
<PropertyName>LastWriteTime</PropertyName>
</TableColumnItem>
<TableColumnItem>
<PropertyName>CreationTime</PropertyName>
</TableColumnItem>
<TableColumnItem>
<PropertyName>Length</PropertyName>
</TableColumnItem>
<TableColumnItem>
<PropertyName>Name</PropertyName>
</TableColumnItem>
</TableColumnItems>
</TableRowEntry>
</TableRowEntries>
</TableControl>
</View>
</ViewDefinitions>
</Configuration>