about_Format.ps1xml
Краткое описание
Файлы Format.ps1xml
в PowerShell определяют отображение объектов по умолчанию в консоли PowerShell. Вы можете создать собственные Format.ps1xml
файлы, чтобы изменить отображение объектов или определить значения по умолчанию для новых типов объектов, создаваемых в PowerShell.
Подробное описание
Файлы Format.ps1xml
в PowerShell определяют отображение объектов по умолчанию в PowerShell. Вы можете создать собственные Format.ps1xml
файлы, чтобы изменить отображение объектов или определить значения по умолчанию для новых типов объектов, создаваемых в PowerShell.
Когда PowerShell отображает объект, он использует данные в структурированных файлах форматирования для определения отображения объекта по умолчанию. Данные в файлах форматирования определяют, отображается ли объект в таблице или списке, и определяет, какие свойства отображаются по умолчанию.
Форматирование влияет только на отображение. Это не влияет на то, какие свойства объекта передаются по конвейеру или как они передаются. Format.ps1xml
Файлы нельзя использовать для настройки формата выходных данных для хэш-таблиц.
PowerShell включает семь файлов форматирования. Эти файлы находятся в каталоге установки ($PSHOME
). Каждый файл определяет отображение группы объектов Microsoft платформа .NET Framework:
Certificate.Format.ps1xml
Объекты в хранилище сертификатов, такие как сертификаты X.509 и хранилища сертификатов.
DotNetTypes.Format.ps1xml
Другие платформа .NET Framework типы, такие как CultureInfo, FileVersionInfo и объекты EventLogEntry.
FileSystem.Format.ps1xml
Объекты файловой системы, такие как файлы и каталоги.
Help.Format.ps1xml
Просмотры справки, такие как подробные и полные представления, параметры и примеры.
PowerShellCore.Format.ps1xml
Объекты, созданные основными командлетами PowerShell, например
Get-Member
иGet-History
.PowerShellTrace.Format.ps1xml
Объекты трассировки, такие как созданные командлетом
Trace-Command
.Registry.Format.ps1xml
Объекты реестра, такие как ключи и записи.
Файл форматирования может определить четыре разных представления каждого объекта:
- Таблица
- List
- Широк.
- Пользовательское
Например, когда выходные данные Get-ChildItem
команды передаются Format-List
в команду, использует представление в FileSystem.Format.ps1xml
файле, Format-List
чтобы определить, как отображать объекты файлов и папок в виде списка.
Если файл форматирования включает несколько представлений объекта, PowerShell применяет первое представление, которое он находит.
Format.ps1xml
В файле представление определяется набором XML-тегов, описывающих имя представления, тип объекта, к которому он может применяться, заголовки столбцов и свойства, отображаемые в тексте представления. Формат в Format.ps1xml
файлах применяется непосредственно перед представлением данных пользователю.
Создание новых файлов Format.ps1xml
.ps1xml
Файлы, установленные с помощью PowerShell, имеют цифровую подпись, чтобы предотвратить изменение, так как форматирование может включать блоки скриптов. Чтобы изменить формат отображения существующего представления объектов или добавить представления для новых объектов, создайте собственные Format.ps1xml
файлы и добавьте их в сеанс PowerShell.
Чтобы создать новый файл, скопируйте существующий Format.ps1xml
файл. Новый файл может иметь любое имя, но у него должно быть .ps1xml
расширение имени файла. Новый файл можно поместить в любой каталог, доступный Для PowerShell, но удобно разместить файлы в каталоге установки PowerShell или$PSHOME
в подкаталоге каталога установки.
Чтобы изменить форматирование текущего представления, найдите представление в файле форматирования и используйте теги для изменения представления. Чтобы создать представление для нового типа объекта, создайте новое представление или используйте существующее представление в качестве модели. Теги описаны в следующем разделе. Затем вы можете удалить все остальные представления в файле, чтобы изменения были очевидны для всех, кто изучает файл.
После сохранения изменений используйте Update-FormatData
командлет, чтобы добавить новый файл в сеанс PowerShell. Если представление должно иметь приоритет над представлением, определенным в встроенных файлах, используйте параметр PrependPath .
Update-FormatData
влияет только на текущий сеанс. Чтобы внести изменения во все будущие сеансы, добавьте Update-FormatData
команду в профиль PowerShell.
Пример. Добавление данных календаря в объекты языка и региональных параметров
В этом примере показано, как изменить форматирование объектов языка и региональных параметров System.Globalization.CultureInfo , Get-Culture
созданных командлетом в текущем сеансе PowerShell. Команды в примере добавляют свойство Calendar в представление таблицы по умолчанию для объектов языка и региональных параметров.
Первым шагом является поиск Format.ps1xml
файла, содержащего текущее представление объектов языка и региональных параметров. Select-String
Следующая команда находит файл:
$Parms = @{
Path = "$PSHOME\*Format.ps1xml"
Pattern = "System.Globalization.CultureInfo"
}
Select-String @Parms
C:\Windows\System32\WindowsPowerShell\v1.0\DotNetTypes.format.ps1xml:113:
<Name>System.Globalization.CultureInfo</Name>
C:\Windows\System32\WindowsPowerShell\v1.0\DotNetTypes.format.ps1xml:115:
<TypeName>System.Globalization.CultureInfo</TypeName>
Эта команда показывает, что определение находится в DotNetTypes.Format.ps1xml
файле.
Следующая команда копирует содержимое файла в новый файл MyDotNetTypes.Format.ps1xml
.
Copy-Item $PSHome\DotNetTypes.format.ps1xml MyDotNetTypes.Format.ps1xml
Откройте файл в любом xml-редакторе или текстовом редакторе MyDotNetTypes.Format.ps1xml
, например Visual Studio Code. Найдите раздел объекта System.Globalization.CultureInfo. Следующий XML-код определяет представления объекта CultureInfo . Объект имеет только представление TableControl .
<View>
<Name>System.Globalization.CultureInfo</Name>
<ViewSelectedBy>
<TypeName>Deserialized.System.Globalization.CultureInfo</TypeName>
<TypeName>System.Globalization.CultureInfo</TypeName>
</ViewSelectedBy>
<TableControl>
<TableHeaders>
<TableColumnHeader>
<Width>16</Width>
</TableColumnHeader>
<TableColumnHeader>
<Width>16</Width>
</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>
Удалите оставшуюся часть файла, за исключением открывающих<?xml>
<Configuration>
, и тегов, <ViewDefinitions>
а также закрытия <ViewDefinitions>
и <Configuration>
тегов. При наличии цифровой подписи удалите его из пользовательского Format.ps1xml
файла.
Теперь MyDotNetTypes.Format.ps1xml
файл должен выглядеть следующим образом:
<?xml version="1.0" encoding="utf-8" ?>
<Configuration>
<ViewDefinitions>
<View>
<Name>System.Globalization.CultureInfo</Name>
<ViewSelectedBy>
<TypeName>Deserialized.System.Globalization.CultureInfo</TypeName>
<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 $PSHOME\MyDotNetTypes.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>
теги.
По умолчанию отображается в Types.ps1xml
Отображение некоторых основных типов объектов по умолчанию определяется в Types.ps1xml
файле в каталоге $PSHOME
. Узлы называются PsStandardMembers, а дочерние элементы используют один из следующих тегов:
<DefaultDisplayProperty>
<DefaultDisplayPropertySet>
<DefaultKeyPropertySet>
Дополнительные сведения см. в разделе about_Types.ps1xml.
Использование файла Format.ps1xml
Чтобы обнаружить ошибки при загрузке или приложении Format.ps1xml
файлов, используйте Trace-Command
командлет с любым из следующих компонентов формата в качестве значения параметра Name :
- FormatFileLoading
- FormatViewBinding
Дополнительные сведения см. в разделе Trace-Command и Get-TraceSource.
Подписывание файла Format.ps1xml
Чтобы защитить пользователей файла, подпишите файл с помощью цифровой Format.ps1xml
подписи. Дополнительные сведения см. в about_Signing.
Пример XML для пользовательского представления "Формат таблицы"
В следующем примере создается пользовательское представление для объектов System.IO.DirectoryInfo и System.IO.FileInfo, созданных Get-ChildItem
.Format-Table
Пользовательское представление называется mygciview и добавляет столбец CreationTime в таблицу.
Пользовательское представление создается из измененной версии FileSystem.Format.ps1xml
файла, который хранится в $PSHOME
PowerShell 5.1.
После сохранения пользовательского .ps1xml
файла используйте Update-FormatData
для включения представления в сеанс PowerShell. В этом примере пользовательское представление должно использовать формат таблицы, в противном случае завершается Format-Table
сбоем.
Используйте Format-Table
параметр View для указания имени пользовательского представления и форматирования выходных данных таблицы. Пример выполнения команды см. в разделе Format-Table.
$Parms = @{
Path = "$PSHOME\*Format.ps1xml"
Pattern = "System.IO.DirectoryInfo"
}
Select-String @Parms
Copy-Item $PSHome\FileSystem.format.ps1xml .\MyFileSystem.Format.ps1xml
Update-FormatData -PrependPath $PSHOME\Format\MyFileSystem.Format.ps1xml
Примечание.
Чтобы соответствовать примеру XML в ограничениях ширины линии, необходимо было сжать некоторые отступы и использовать разрывы строк в коде.
<?xml version="1.0" encoding="utf-8" ?>
<Configuration>
<SelectionSets>
<SelectionSet>
<Name>FileSystemTypes</Name>
<Types>
<TypeName>System.IO.DirectoryInfo</TypeName>
<TypeName>System.IO.FileInfo</TypeName>
</Types>
</SelectionSet>
</SelectionSets>
<Controls>
<Control>
<Name>FileSystemTypes-GroupingFormat</Name>
<CustomControl>
<CustomEntries>
<CustomEntry>
<CustomItem>
<Frame>
<LeftIndent>4</LeftIndent>
<CustomItem>
<Text AssemblyName="System.Management.Automation"
BaseName="FileSystemProviderStrings"
ResourceId="DirectoryDisplayGrouping"/>
<ExpressionBinding>
<ScriptBlock>
$_.PSParentPath.Replace("Microsoft.PowerShell.Core\FileSystem::", "")
</ScriptBlock>
</ExpressionBinding>
<NewLine/>
</CustomItem>
</Frame>
</CustomItem>
</CustomEntry>
</CustomEntries>
</CustomControl>
</Control>
</Controls>
<ViewDefinitions>
<View>
<Name>mygciview</Name>
<ViewSelectedBy>
<SelectionSetName>FileSystemTypes</SelectionSetName>
</ViewSelectedBy>
<GroupBy>
<PropertyName>PSParentPath</PropertyName>
<CustomControlName>FileSystemTypes-GroupingFormat</CustomControlName>
</GroupBy>
<TableControl>
<TableHeaders>
<TableColumnHeader>
<Label>Mode</Label>
<Width>7</Width>
<Alignment>left</Alignment>
</TableColumnHeader>
<TableColumnHeader>
<Label>LastWriteTime</Label>
<Width>25</Width>
<Alignment>right</Alignment>
</TableColumnHeader>
<TableColumnHeader>
<Label>CreationTime</Label>
<Width>25</Width>
<Alignment>right</Alignment>
</TableColumnHeader>
<TableColumnHeader>
<Label>Length</Label>
<Width>14</Width>
<Alignment>right</Alignment>
</TableColumnHeader>
<TableColumnHeader/>
</TableHeaders>
<TableRowEntries>
<TableRowEntry>
<Wrap/>
<TableColumnItems>
<TableColumnItem>
<PropertyName>Mode</PropertyName>
</TableColumnItem>
<TableColumnItem>
<ScriptBlock>
[String]::Format("{0,10} {1,8}",
$_.LastWriteTime.ToString("d"),
$_.LastWriteTime.ToString("t"))
</ScriptBlock>
</TableColumnItem>
<TableColumnItem>
<ScriptBlock>
[String]::Format("{0,10} {1,8}",
$_.CreationTime.ToString("d"),
$_.LastWriteTime.ToString("t"))
</ScriptBlock>
</TableColumnItem>
<TableColumnItem>
<PropertyName>Length</PropertyName>
</TableColumnItem>
<TableColumnItem>
<PropertyName>Name</PropertyName>
</TableColumnItem>
</TableColumnItems>
</TableRowEntry>
</TableRowEntries>
</TableControl>
</View>
</ViewDefinitions>
</Configuration>
См. также
PowerShell