about_Format.ps1xml

簡単な説明

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

詳細な説明

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

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

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

PowerShell には、7 つの書式設定ファイルが含まれています。 これらのファイルは、インストール ディレクトリ ($PSHOME) にあります。 各ファイルは、Microsoft .NET Framework オブジェクトのグループの表示を定義します。

  1. Certificate.Format.ps1xml

    証明書ストア内のオブジェクト (X.509 証明書や証明書ストアなど)。

  2. DotNetTypes.Format.ps1xml

    CultureInfo、FileVersionInfo、EventLogEntry オブジェクトなど、その他の .NET Framework 型。

  3. FileSystem.Format.ps1xml

    ファイルやディレクトリなどのファイル システム オブジェクト。

  4. Help.Format.ps1xml

    詳細ビュー、完全ビュー、パラメーター、例などのヘルプ ビュー。

  5. PowerShellCore.Format.ps1xml

    PowerShell コア コマンドレットによって生成されるオブジェクト (例 Get-Member : . Get-History.

  6. PowerShellTrace.Format.ps1xml

    コマンドレットによって Trace-Command 生成されたオブジェクトなどのトレース オブジェクト。

  7. Registry.Format.ps1xml

    キーやエントリなどのレジストリ オブジェクト。

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

  • テーブル
  • 一覧取得
  • ワイド
  • Custom

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

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

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

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

PowerShell でインストールされたファイルは .ps1xml 、書式設定にスクリプト ブロックを含めることができるため、改ざんを防ぐためにデジタル署名されます。 既存のオブジェクト ビューの表示形式を変更したり、新しいオブジェクトのビューを追加したりするには、独自 Format.ps1xml のファイルを作成して PowerShell セッションに追加します。

新しいファイルを作成するには、既存 Format.ps1xml のファイルをコピーします。 新しいファイルには任意の名前を付けることができますが、ファイル名拡張子が .ps1xml 必要です。 新しいファイルは、PowerShell からアクセスできる任意のディレクトリに配置できますが、PowerShell インストール ディレクトリ ($PSHOME) またはインストール ディレクトリのサブディレクトリにファイルを配置すると便利です。

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

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

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

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

MyDotNetTypes.Format.ps1xml Visual Studio Code などの任意の 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>
    </TableHeaders>
    <TableRowEntries>
      <TableRowEntry>
        <TableColumnItems>
          <TableColumnItem>
            <PropertyName>LCID</PropertyName>
          </TableColumnItem>
          <TableColumnItem>
            <PropertyName>Name</PropertyName>
          </TableColumnItem>
          <TableColumnItem>
            <PropertyName>DisplayName</PropertyName>
          </TableColumnItem>
        </TableColumnItems>
      </TableRowEntry>
    </TableRowEntries>
  </TableControl>
</View>

ファイルの reメインder を削除します。ただし、開始<?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>

次のタグを使用して、テーブル行に Calendar新しい列項目を<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>

ファイルを保存して閉じます。 現在の PowerShell セッションに新しいフォーマット ファイルを追加するために使用 Update-FormatData します。

この例では、PrependPath パラメーターを使用して、元のファイルよりも高い優先順位で新しいファイルを配置します。 詳細については、「Update-FormatData」を参照してください

Update-FormatData -PrependPath $PSHOME\MyDotNetTypes.Format.ps1xml

変更をテストするには、Calendar プロパティを含む出力を入力Get-Cultureして確認します。

Get-Culture
LCID Name  Calendar                               DisplayName
---- ----  --------                               -----------
1033 en-US System.Globalization.GregorianCalendar English (United States)

Format.ps1xml ファイル内の XML

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

各ファイルの 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><Width>および<Alignment>タグを含むタグが含<Label>まれます。 タグには <TableRowEntries> 、テーブル内の <TableRowEntry> 各行のタグが含まれています。 タグ <TableRowEntry> には、行の <TableColumnItems> 各列のタグを <TableColumnItem> 含むタグが含まれています。 通常、タグには<PropertyName><TableColumnItem>定義された場所に表示されるオブジェクト プロパティを識別するタグか、場所<ScriptBlock>に表示される結果を計算するスクリプト コードを含むタグが含まれます。

Note

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

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

ListControl タグ

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

WideControl タグ

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

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

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

CustomControl タグ

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

Types.ps1xml の既定の表示

一部の基本的なオブジェクトの種類の既定の表示は、ディレクトリ内の Types.ps1xml ファイルで $PSHOME 定義されています。 ノードには PsStandardMembers という名前が付けられ、サブノードでは次のいずれかのタグが使用されます。

  • <DefaultDisplayProperty>
  • <DefaultDisplayPropertySet>
  • <DefaultKeyPropertySet>

詳細については、「about_Types.ps1xml」を参照 してください

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

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

  • FormatFileLoading
  • FormatViewBinding

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

Format.ps1xml ファイルへの署名

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

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

次の例では、Format-Table作成元の System.IO.DirectoryInfo オブジェクトと System.IO.FileInfo オブジェクトのカスタム ビューを作成Get-ChildItemします。 カスタム ビューの名前は mygciview で、CreationTime 列がテーブルに追加されます。

カスタム ビューは、PowerShell 5.1 に格納されている編集済みのバージョンのFileSystem.Format.ps1xml$PSHOMEファイルから作成されます。

カスタム .ps1xml ファイルを保存したら、PowerShell セッションにビューを含めるために使用 Update-FormatData します。 この例では、カスタム ビューでテーブル形式を使用する必要があります。それ以外の場合は Format-Table 失敗します。

View パラメーターと共に使用してFormat-Table、カスタム ビューの名前を指定し、テーブルの出力を書式設定します。 コマンドの実行方法の例については、「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

Note

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>

関連項目