次の方法で共有


about_Format.ps1xml

簡単な説明

PowerShell 6 以降では、オブジェクトの既定のビューは PowerShell ソース コードで定義されています。

独自の Format.ps1xml ファイルを作成して、オブジェクトの表示を変更したり、PowerShell で作成する新しいオブジェクトの種類の既定の表示を定義したりできます。

詳細な説明

PowerShell 6 以降では、既定のビューは PowerShell ソース コードで定義されています。 PowerShell 5.1 以前のバージョンの Format.ps1xml ファイルは、PowerShell 6 以降のバージョンには存在しません。

PowerShell ソース コードは、PowerShell コンソールでのオブジェクトの既定の表示を定義します。 独自の Format.ps1xml ファイルを作成して、オブジェクトの表示を変更したり、PowerShell で作成する新しいオブジェクトの種類の既定の表示を定義したりできます。

PowerShell は、オブジェクトを表示するときに、構造化書式設定ファイル内のデータを使用して、オブジェクトの既定の表示を決定します。 書式設定ファイル内のデータによって、オブジェクトがテーブルまたはリストのどちらにレンダリングされるかが決まります。また、既定で表示されるプロパティが決まります。

書式設定は表示にのみ影響します。 どのオブジェクト プロパティがパイプラインに渡されるか、または渡される方法には影響しません。 Format.ps1xml ファイルを使用してハッシュ テーブルの出力形式をカスタマイズすることはできません。

.ps1xml書式設定ファイルでは、各オブジェクトの 4 つの異なるビューを定義できます。

  • テーブル
  • リスト
  • ワイド
  • Custom

たとえば、 Get-ChildItem コマンドの出力を Format-List コマンドにパイプ処理する場合、 Format-List はソース コードで定義されているリスト ビューを使用して、ファイル オブジェクトとフォルダー オブジェクトをリストとして表示する方法を決定します。

書式設定ファイルにオブジェクトの複数のビューが含まれている場合、PowerShell は最初に見つけたビューを適用します。

カスタム Format.ps1xml ファイルでは、ビューは、ビューの名前、適用できるオブジェクトの種類、列ヘッダー、およびビューの本文に表示されるプロパティを記述する XML タグのセットによって定義されます。 Format.ps1xml ファイルの形式は、データがユーザーに表示される直前に適用されます。

新しい Format.ps1xml ファイルの作成

既存のオブジェクト ビューの表示形式を変更したり、新しいオブジェクトのビューを追加したりするには、独自の Format.ps1xml ファイルを作成して、PowerShell セッションに追加します。

Format.ps1xml ファイルを作成してカスタム ビューを定義するには、Get-FormatData および Export-FormatData コマンドレットを使用します。 テキスト エディターを使用してファイルを編集します。 ファイルは、 $HOMEのサブディレクトリなど、PowerShell がアクセスできる任意のディレクトリに保存できます。

現在のビューの書式を変更するには、書式設定ファイルでビューを見つけ、タグを使用してビューを変更します。 新しいオブジェクトタイプのビューを作成するには、新しいビューを作成するか、既存のビューをモデルとして使用します。 タグについては、次のセクションで説明します。 その後、ファイル内の他のすべてのビューを削除して、ファイルを調べるすべてのユーザーに変更が反映されるようにすることができます。

変更を保存したら、 Update-FormatData を使用して新しいファイルを PowerShell セッションに追加します。 組み込みファイルで定義されているビューよりもビューを優先する場合は、 PrependPath パラメーターを使用します。 Update-FormatData は、現在のセッションにのみ影響します。 今後のすべてのセッションを変更するには、powerShell プロファイルに Update-FormatData コマンドを追加します。

例: カルチャ オブジェクトに予定表データを追加する

この例では、現在の PowerShell セッションでGet-Culture コマンドレットによって生成されたカルチャ オブジェクトの書式設定System.Globalization.CultureInfoを変更する方法を示します。 この例のコマンドは、カルチャ オブジェクトの既定のテーブル ビュー表示に 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>

<TableColumnHeader> タグの新しいセットを追加して、Calendar プロパティの新しい列を作成します。 Calendar プロパティの値は長くすることができます。そのため、<Width>として 45 文字の値を指定します。

<TableHeaders>
  <TableColumnHeader>
    <Width>16</Width>
  </TableColumnHeader>
  <TableColumnHeader>
    <Width>16</Width>
  </TableColumnHeader>
  <TableColumnHeader>
    <Width>45</Width>
  </TableColumnHeader>
  <TableColumnHeader/>
</TableHeaders>

<TableColumnItem>タグと<PropertyNameタグを使用して、テーブル行にCalendarの新しい列項目を追加します。

<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)

Format.ps1xml ファイル内の XML

完全なスキーマ定義は、GitHub の PowerShell ソース コード リポジトリの Format.xsd にあります。

Format.ps1xml ファイルの ViewDefinitions セクションには、各ビューを定義する<View> タグが含まれています。 一般的な <View> タグには、次のタグが含まれます。

  • <Name> はビューの名前を識別します。
  • <ViewSelectedBy> は、ビューが適用されるオブジェクトの種類を指定します。
  • <GroupBy> は、ビュー内の項目をグループで結合する方法を指定します。
  • <TableControl><ListControl><WideControl>、および <CustomControl> には、各項目の表示方法を指定するタグが含まれています。

ViewSelectedBy タグ

<ViewSelectedBy> タグには、ビューが適用されるオブジェクトの種類ごとに<TypeName> タグを含めることができます。 または、<SelectionSet> タグを使用して他の場所で定義されている選択セットを参照する<SelectionSetName> タグを含めることができます。

GroupBy タグ

<GroupBy> タグには、項目をグループ化するオブジェクト プロパティを指定する<PropertyName> タグが含まれています。 また、各グループのラベルとして使用する文字列を指定する<Label> タグか、<Control> タグを使用して他の場所で定義されたカスタム コントロールを参照する<CustomControlName> タグも含まれます。 <Control> タグには、<Name> タグと<CustomControl> タグが含まれています。

TableControlTag

通常、 <TableControl> タグには、テーブルのヘッドと行の書式設定を定義する <TableHeaders> タグと <TableRowEntries> タグが含まれています。 通常、<TableHeaders> タグには、<Label><Width>、および<Alignment>タグを含む<TableColumnHeader>タグが含まれます。 <TableRowEntries> タグには、テーブル内の各行の<TableRowEntry>タグが含まれています。 <TableRowEntry> タグには、行の各列の<TableColumnItem> タグを含む<TableColumnItems> タグが含まれています。 通常、 <TableColumnItem> タグには、定義された場所に表示されるオブジェクト プロパティを識別する <PropertyName> タグか、場所に表示される結果を計算するスクリプト コードを含む <ScriptBlock> タグが含まれます。

Note

スクリプト ブロックは、計算結果が役立つ可能性がある場所の他の場所でも使用できます。

<TableColumnItem> タグには、プロパティまたは計算結果の表示方法を指定する<FormatString> タグを含めることもできます。

ListControl タグ

<ListControl> タグには、通常、<ListEntries> タグが含まれています。 <ListEntries> タグには、<ListEntry> タグが含まれています。 <ListEntry> タグには、<ListItems> タグが含まれています。 <ListItems> タグには、<PropertyName>タグを含む<ListItem>タグが含まれています。 <PropertyName> タグは、リスト内の指定した場所に表示されるオブジェクト プロパティを指定します。 ビュー選択が選択セットを使用して定義されている場合、<ListControl>タグと<ListEntry> タグには、1 つ以上の<TypeName> タグを含む<EntrySelectedBy> タグを含めることもできます。 これらの <TypeName> タグは、 <ListControl> タグが表示されるオブジェクトの種類を指定します。

WideControl タグ

<WideControl> タグには、通常、<WideEntries> タグが含まれています。 <WideEntries> タグには、1 つ以上の<WideEntry> タグが含まれています。 <WideEntry> タグには、1 つの<WideItem> タグが含まれています。

<WideItem> タグには、<PropertyName> タグまたは<ScriptBlock> タグを含める必要があります。 <PropertyName> タグは、ビュー内の指定した位置に表示するプロパティを指定します。 <ScriptBlock> タグは、ビュー内の指定した場所で評価および表示するスクリプトを指定します。

<WideItem> タグには、プロパティの表示方法を指定する<FormatString> タグを含めることができます。

CustomControl タグ

<CustomControl> タグを使用すると、スクリプト ブロックを使用して形式を定義できます。 通常、<CustomControl> タグには、複数の<CustomEntry> タグを含む<CustomEntries> タグが含まれます。 各<CustomEntry> タグには、<Text><Indentation><ExpressionBinding><NewLine> タグなど、ビュー内の指定した場所の内容と書式設定を指定するさまざまなタグを含めることができる<CustomItem> タグが含まれています。

トレース形式.ps1xml ファイルの使用

Format.ps1xml ファイルの読み込みまたはアプリケーションでのエラーを検出するには、Trace-Command コマンドレットを使用し、Name パラメーターの値として次のいずれかの形式コンポーネントを指定します。

  • FormatFileLoading
  • FormatViewBinding

詳細については、「 Trace-Command および Get-TraceSourceを参照してください。

Format.ps1xml ファイルへの署名

Format.ps1xml ファイルのユーザーを保護するには、デジタル署名を使用してファイルに署名します。 詳細については、「 about_Signing」を参照してください。

Format-Table カスタム ビューのサンプル XML

次の XML サンプルでは、System.IO.DirectoryInfo および Get-ChildItem によって作成された System.IO.FileInfo オブジェクトのFormat-Table カスタム ビューを作成します。 カスタム ビューの名前は mygciview CreationTime 列をテーブルに追加します。

カスタム ビューを作成するには、 Get-FormatData コマンドレットと Export-FormatData コマンドレットを使用して .ps1xml ファイルを生成します。 次に、 .ps1xml ファイルを編集して、カスタム ビューのコードを作成します。 .ps1xml ファイルは、PowerShell がアクセスできる任意のディレクトリに格納できます。 たとえば、 $HOMEのサブディレクトリなどです。

.ps1xml ファイルが作成されたら、Update-FormatData コマンドレットを使用して、現在の PowerShell セッションにビューを含めます。 または、すべての PowerShell セッションで使用可能なビューが必要な場合は、PowerShell プロファイルに更新コマンドを追加します。

この例では、カスタム ビューでテーブル形式を使用する必要があります。それ以外の場合は、 Format-Table 失敗します。

Format-TableView パラメーターと共に使用して、カスタム ビューの名前、mygciview を指定し、テーブルの出力を CreationTime 列で書式設定します。 コマンドの実行方法の例については、「 Format-Tableを参照してください。

Note

ソース コードから書式設定 XML を取得してカスタム ビューを作成することはできますが、目的の結果を得るにはさらに開発が必要になる場合があります。

次の Get-FormatData コマンドでは、すべてのローカル書式設定情報が確実に返されるように、 PowerShellVersion パラメーターの代わりに使用できます。 特定の PowerShell バージョンではなく、 -PowerShellVersion $PSVersionTable.PSVersion を使用します。

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>

関連項目