Поделиться через


Сведения о 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>

См. также раздел

Export-FormatData

Get-FormatData;

Get-TraceSource

Ссылка на схему формата XML

Trace-Command

Update-FormatData

Написание файла форматирования PowerShell