about_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
Файл форматирования может определить четыре разных представления каждого объекта:
- Таблица
- List
- Широк.
- Пользовательское
Например, если выходные данные 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
Откройте файл в любом xml-редакторе или текстовом редакторе CultureInfo.Format.ps1xml
, например 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>
Создайте столбец для свойства 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>
тег для каждого столбца в строке. Как правило, <TableColumnItem>
тег содержит <PropertyName>
либо тег, определяющий свойство объекта, отображаемое в определенном расположении, либо <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>
содержит один <WideItem>
тег.
Тег <WideItem>
должен содержать <PropertyName>
тег или <ScriptBlock>
тег. Тег <PropertyName>
указывает свойство, отображаемое в указанном расположении в представлении. Тег <ScriptBlock>
указывает скрипт для оценки и отображения в указанном расположении в представлении.
Тег <WideItem>
может содержать тег, указывающий <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 для пользовательского представления "Формат таблицы"
В следующем примере XML создается пользовательское представление для объектов System.IO.DirectoryInfo и System.IO.FileInfo, созданныхGet-ChildItem
.Format-Table
Пользовательское представление называется mygciview и добавляет столбец CreationTime в таблицу.
Чтобы создать пользовательское представление, используйте Get-FormatData
командлеты для Export-FormatData
создания .ps1xml
файла. Затем измените .ps1xml
файл, чтобы создать код для пользовательского представления. Файл .ps1xml
можно хранить в любом каталоге, к которому может получить доступ PowerShell. Например, подкаталог $HOME
.
.ps1xml
После создания файла используйте Update-FormatData
командлет для включения представления в текущий сеанс PowerShell. Кроме того, добавьте команду обновления в профиль 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>
См. также
PowerShell