about_Format.ps1xml

Назначение: Windows PowerShell 2.0, Windows PowerShell 3.0, Windows PowerShell 4.0, Windows PowerShell 5.0

РАЗДЕЛ

about_Format.ps1xml

КРАТКОЕ ОПИСАНИЕ

Файлы Format.ps1xml в Windows PowerShell® определяют отображение по умолчанию для объектов в консоли Windows PowerShell. Чтобы изменить способ отображения объектов или определить отображения по умолчанию для новых типов объектов, создаваемых в Windows PowerShell, можно разработать собственные файлы Format.ps1xml.

ПОДРОБНОЕ ОПИСАНИЕ

Файлы Format.ps1xml в Windows PowerShell определяют заданный по умолчанию способ отображения объектов в Windows PowerShell. Чтобы изменить способ отображения объектов или определить отображения по умолчанию для новых типов объектов, создаваемых в Windows PowerShell, можно разработать собственные файлы Format.ps1xml.

Когда Windows PowerShell отображает объект, он использует данные в структурированных файлах форматирования для определения способа отображения объекта по умолчанию. Данные в файлах форматирования определяют вариант отображения объекта — в таблице или списке, а также определяют, какие свойства отображаются по умолчанию.

Форматирование влияет только на отображение. Оно не затрагивает свойства объекта, передаваемые по конвейеру, или способ их передачи. Файлы Format.ps1xml нельзя использовать для настройки выходного формата хэш-таблиц.

Windows 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

Объекты, созданные основными командлетами Windows PowerShell, например Get-Member и Get-Get-History.

PowerShellTrace.format.ps1xml

Объекты трассировки, например те, которые созданы с помощью командлета Trace-Command.

Registry.format.ps1xml

Объекты реестра, например разделы и записи.

Файл форматирования может определять четыре различных представления каждого объекта: таблица, список, полное и настраиваемое. Например, если выходные данные команды Get-ChildItem передаются по конвейеру в команду Format-List, Format-List использует представление в файле FileSystem.format.ps1xml для определения способа отображения объектов файлов и папок в виде списка.

Если файл форматирования содержит несколько представлений объекта, Windows PowerShell применяет первое представление, которое будет найдено.

В файле 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> определяет имя представления.

<ViewSelectedBy>

Тег <ViewSelectedBy> указывает тип или типы объекта, к которым применяется представление.

<GroupBy>

Тег <GroupBy> указывает способ объединения в группы для элементов в представлении.

<TableControl>

<ListControl>

<WideControl>

<CustomControl>

Эти теги содержат теги, указывающие способ отображения каждого элемента <DefaultDisplayProperty>.

Тег <ViewSelectedBy> может содержать тег <TypeName> для каждого типа объекта, к которому применяется представление. Или он может содержать тег <SelectionSetName>, который ссылается на набор выбора, определенный в другом месте с помощью тега <SelectionSet>.

Тег <GroupBy> содержит тег <PropertyName>, указывающий свойство объекта, по которому должны быть сгруппированы элементы. Он также содержит тег <Label>, который задает строковое значение для использования в качестве названия для каждой группы, или тег <CustomControlName>, который ссылается на пользовательский элемент управления, определенный в другом месте с помощью тега <Control>. Тег <Control> содержит тег <Name> и тег <CustomControl>.

Тег <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>, который определяет способ отображения свойства.

Тег <CustomControl> позволяет использовать блок сценария для определения формата. Тег <CustomControl> обычно содержит тег <CustomEntries>, который содержит несколько тегов <CustomEntry>. Каждый тег <CustomEntry> содержит теги <CustomItem>, которые могут содержать различные теги, определяющие содержимое и форматирование указанного расположения в представлении, включая теги <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