РАЗДЕЛ about_Format.ps1xml КРАТКОЕ ОПИСАНИЕ Файлы Format.ps1xml в Windows PowerShell определяют формат по умолчанию для отображения объектов в консоли Windows PowerShell. Можно создавать собственные файлы Format.ps1xml, чтобы изменять отображение объектов или определять форматы отображения по умолчанию для новых объектов, создаваемых в Windows PowerShell. ПОЛНОЕ ОПИСАНИЕ Файлы Format.ps1xml в Windows PowerShell определяют формат по умолчанию для отображения объектов в Windows PowerShell. Можно создавать собственные файлы Format.ps1xml, чтобы изменять отображение объектов или определять форматы отображения по умолчанию для новых объектов, создаваемых в Windows PowerShell. Когда в Windows PowerShell отображается объект, для определения формата отображения объекта по умолчанию используются данные, структурированные в файлах форматирования. Данные в файлах форматирования определяют, должен ли объект отображаться в виде таблицы или списка, а также свойства, которые отображаются по умолчанию. Форматирование влияет только на отображение. Оно не влияет на то, какие свойства объекта передаются по конвейеру и как они передаются. Windows PowerShell включает семь файлов форматирования. Эти файлы расположены в каталоге установки ($pshome). Каждый файл определяет отображение группы объектов Microsoft .NET Framework: Certificate.Format.ps1xml Объекты в хранилище сертификатов, например хранилища сертификатов и сертификаты X.509. DotNetTypes.Format.ps1xml Другие типы .NET, например объекты CultureInfo, FileVersionInfo и EventLogEntry. FileSystem.Format.ps1xml Объекты файловой системы, например файлы и каталоги. Help.Format.ps1xml Представления справки, например подробные и полные представления, параметры и примеры. PowerShellCore.format.ps1xml Объекты, создаваемые базовыми командлетами Windows PowerShell, такими как Get-Member и Get-History. PowerShellTrace.format.ps1xml Объекты трассировки, например объекты, создаваемые командлетом Trace-Command. Registry.format.ps1xml Объекты реестра, например разделы и записи. Файл форматирования может определять четыре различных представления каждого из объектов: табличное, списочное, широкое и комплексное. Например, когда выходные данные команды Get-ChildItem передаются по конвейеру команде Format-List, команда Format-List использует представление из файла FileSystem.format.ps1xml, чтобы определить, как отображать объекты файлов и папок в списке. В файле Format.ps1xml представление определяется при помощи набора тегов XML, описывающих имя представления, тип объекта, к которому оно может быть применено, заголовки столбцов, а также свойства, отображаемые в теле представления. Формат из файлов Format.ps1xml применяется непосредственно перед отображением данных для пользователя. Создание новых файлов Format.ps1xml Файлы PS1XML, устанавливаемые вместе с Windows PowerShell, имеют цифровую подпись, защищающую их от искажения, поскольку форматирование может включать блоки скриптов. Поэтому, чтобы изменить формат отображения для существующего представления объекта или добавить представления для новых объектов, следует создавать собственные файлы Format.ps1xml, а затем добавлять их в сеанс Windows PowerShell. Чтобы создать новый файл, скопируйте имеющийся файл Format.ps1xml. Новый файл может иметь любое имя, но он должен иметь расширение PS1XML. Новый файл можно поместить в любой каталог, доступный оболочке Windows PowerShell, однако рекомендуется помещать его в каталог установки Windows PowerShell ($pshome) или в подкаталог каталога установки. Чтобы изменить форматирование текущего представления, найдите это представление в файле форматирования, а затем измените его с помощью тегов. Чтобы создать представление для нового типа объектов, создайте новое представление или воспользуйтесь в качестве шаблона имеющимся представлением. (Теги описаны в следующем подразделе этого раздела.) Можно удалить все остальные представления в файле, чтобы любому, кто просматривает файл, было легко найти изменения. После сохранения изменений необходимо с помощью командлета Update-FormatData добавить новый файл в сеанс Windows PowerShell. Если представление должно иметь приоритет относительно представления, определенного во встроенных файлах, следует использовать параметр PrependData командлета Update-FormatData. Действие командлета Update-FormatData распространяется только на текущий сеанс. Чтобы изменение распространялось на все будущие сеансы, следует добавить команду Update-FormatData в профиль Windows PowerShell. Пример: добавление данных календаря в объекты культуры В этом примере показано, как изменить форматирование объектов культуры (System.Globalization.CultureInfo), созданных командлетом Get-Culture. Команды в этом примере добавляют свойство календаря в табличное представление по умолчанию объектов культуры. Первый шаг - найти файл Format.ps1xml, который содержит текущее представление объектов культуры. Следующая команда Select-String находит этот файл: select-string -path $pshome\*format.ps1xml ` -pattern System.Globalization.CultureInfo В результате выполнения этой команды выясняется, что определение хранится в файле DotNetTypes.Format.ps1xml. Следующая команда копирует содержимое файла в новый файл MyDotNetTypes.Format.ps1xml. copy-item DotNetTypes.Format.ps1xml MyDotNetTypes.Format.ps1xml Затем откройте файл MyDotNetTypes.Format.ps1xml в любом редакторе XML или текста, например в "Блокноте". Найдите раздел объекта 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> <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> и закрывающих тегов <ViewDefintions> и <Configuration>. Кроме того необходимо удалить цифровую подпись, если файл изменяется. <?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 знаков, как показано ниже: <TableControl> <TableHeaders> <TableColumnHeader> <Width>16</Width> </TableColumnHeader> <TableColumnHeader> <Width>16</Width> </TableColumnHeader> <TableColumnHeader> <Width>45</Width> </TableColumnHeader> <TableColumnHeader/> </TableHeaders> После этого добавьте элемент нового столбца в строки таблицы, как показано ниже: <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, например приведенной ниже команды, добавьте новый файл формата в текущий сеанс. В этой команде используется параметр PrependData, чтобы задать для нового файла более высокий приоритет по сравнению с исходным файлом. (Чтобы получить дополнительные сведения о команде Update-FormatData, введите команду get-help update-formatdata.) update-formatdata -prependpath $pshome\MyDotNetTypes.format.ps1xml Чтобы проверить изменение, введите команду get-culture и изучите выходные данные, которые теперь должны включать свойство Calendar. C:\PS> get-culture LCID Name Calendar DisplayName ---- ---- -------- ----------- 1033 en-US System.Globalization.GregorianCalendar English (United States) XML-код в файлах Format.ps1xml Раздел ViewDefinitions каждого из файлов Format.ps1xml содержит теги <View>, которые определяют каждое из представлений. Обычно тег <View> содержит следующие теги: <Name> Тег <Name> определяет имя представления. <ViewSelectedBy> Тег <ViewSelectedBy> определяет тип или типы объектов, к которым применимо представление. <GroupBy> Тег <GroupBy> определяет, каким образом элементы в представлении объединяются в группы. <TableControl> <ListControl> <WideControl> <ComplexControl> Эти теги содержат теги, определяющие, каким образом отображается тот или иной элемент. Тег <ViewSelectedBy> может содержать тег <TypeName> для каждого типа объектов, к которым применяется представление. Либо он может содержать тег <SelectionSetName>, который ссылается на набор выбора, определенный в другом месте с помощью тега <SelectionSet>. Тег <GroupBy> содержит тег <PropertyName>, задающий свойство объекта, по которому должны группироваться элементы. Он также содержит тег <Label>, задающий строку, которая должна использоваться в качестве метки для каждой группы, или тег <ComplexControlName>, ссылающийся на комплексный элемент управления, определенный в другом месте при помощи тега <Control>. Тег <Control> содержит теги <Name> и <ComplexControl>. Тег <TableControl> обычно содержит теги <TableHeaders> и <TableRowEntries>, определяющие форматирование заголовков и строк таблицы. Тег <TableHeaders> обычно содержит теги <TableColumnHeader>, которые содержат теги <Label>, <Width> и <Alignment>. Тег <TableRowEntries> содержит теги <TableRowEntry> для каждой строки таблицы. Обычно тег <TableRowEntry> содержит тег <TableColumnItems>, который содержит тег <TableColumnItem> для каждого столбца в строке. Обычно тег <TableColumnItem> содержит либо тег <PropertyName>, идентифицирующий свойство объекта, которое должно отображаться в определенном месте, либо тег <ScriptBlock>, содержащий код скрипта, вычисляющего результат, который должен отображаться в этом месте. Примечание. В местах, в которых могут потребоваться вычисляемые результаты, могут также использоваться блоки скриптов. Тег <TableColumnItem> может также содержать тег <FormatString>, который определяет, как должно отображаться свойство или вычисленные результаты. Тег <ListControl> обычно содержит тег <ListEntries>. Тег <ListEntries> содержит тег <ListItems>. Тег <ListItems> содержит теги <ListItem>, которые в свою очередь содержат теги <PropertyName>. Теги <PropertyName> задают свойство объекта, которое должно отображаться в указанной позиции списка. Если выбор представления определяется при помощи набора выбора, тег <ListControl> может также содержать тег <EntrySelectedBy>, содержащий один или несколько тегов <TypeName>. Эти теги <TypeName> определяют тип объекта, который должен отображаться тегом <ListControl>. Тег <WideControl> обычно содержит тег <WideEntries>. Тег <WideEntries> обычно содержит один или несколько тегов <WideEntry>. Тег <WideEntry> обычно содержит тег <PropertyName>, задающий свойство, которое должно отображаться в указанном месте в представлении. Тег <PropertyName> может содержать тег <FormatString>, который определяет, как должно отображаться свойство. Тег <ComplexControl> содержит более сложные сочетания тегов по сравнению с представлениями других типов. Тег <ComplexControl> обычно содержит тег <ComplexEntries>. Тег <ComplexEntries> содержит несколько тегов <ComplexEntry>. Тег <ComplexEntry> обычно содержит тег <ComplexItem>. Этот тег, в свою очередь, может содержать различные теги, задающие содержимое и форматирование для указанного места в представлении, в том числе теги <Text>, <Indentation>, <ExpressionBinding> и <NewLine>. Update-FormatData Чтобы загрузить файлы Format.ps1xml в сеанс Windows PowerShell, используется командлет Update-FormatData. Если представление в файле должно иметь приоритет относительно представлений во встроенном файле Format.ps1xml, следует использовать параметр PrependData командлета Update-FormatData. Действие командлета Update-FormatData распространяется только на текущий сеанс. Чтобы изменение распространялось на все будущие сеансы, следует добавить команду Update-FormatData в профиль Windows PowerShell. Представление по умолчанию в Types.ps1xml В файле Types.ps1xml из каталога $pshome определено представление по умолчанию для некоторых базовых типов объектов. Узлы имеют имена PsStandardMembers, а вложенные узлы обозначаются одним из следующих тегов: <DefaultDisplayProperty> <DefaultDisplayPropertySet> <DefaultKeyPropertySet> Чтобы получить дополнительные сведения, введите следующую команду: get-help about_types.ps1xml Трассировка использования файлов Format.ps1xml Чтобы определить ошибки при загрузке или применении файлов Format.ps1xml, следует использовать командлет Trace-Command и указать при этом в качестве значения параметра Name любой из следующих компонентов формата: FormatFileLoading UpdateFormatData FormatViewBinding Чтобы получить дополнительные сведения, введите следующие команды: get-help trace-command get-help get-tracesource Подписание файлов Format.ps1xml Чтобы защитить пользователей файла Format.ps1xml, его необходимо подписать с помощью цифровой подписи. Чтобы получить дополнительные сведения, введите следующую команду: get-help about_signing СМ. ТАКЖЕ Update-FormatData Trace-Command Get-TraceSource