ja-JP/about_Types.ps1xml.help.txt

TOPIC
    about_Types.ps1xml

簡単な説明
    PowerShell で使用されるオブジェクトの型を拡張するために、
    Types.ps1xml ファイルを使用する方法を説明します。

詳細な説明
    拡張型データは、PowerShell におけるオブジェクト型の追加の
    プロパティとメソッド(「メンバー」)を定義します。PowerShell
    セッションに拡張型データを追加するには、2 つの手法があります。

    - Types.ps1xml ファイル: 拡張型データを定義する XML ファイルです。
    - Update-TypeData: Types.ps1xml ファイルを再読み込みし、現在の
      セッションの型に拡張データを定義するコマンドレットです。

    このトピックでは Types.ps1xml ファイルについて説明します。
    Update-TypeData コマンドレットを使用して現在のセッションに動的な
    拡張型データを追加する方法の詳細については、Update-TypeData を
    参照してください。

  拡張型データについて

    拡張型データは、PowerShell におけるオブジェクト型の追加の
    プロパティとメソッド(「メンバー」)を定義します。PowerShell が
    サポートする任意の型を拡張でき、追加されたプロパティとメソッドは、
    オブジェクト型に定義されているプロパティと同じ方法で使用できます。

    たとえば、PowerShell は、Get-Date コマンドレットが返すような
    すべての System.DateTime オブジェクトに DateTime プロパティを
    追加します。

        (Get-Date).DateTime

        Sunday, January 29, 2012 9:43:57 AM

    DateTime プロパティは System.DateTime 構造体の説明には見つかり
    ません。これは PowerShell がプロパティを追加しているためで、
    PowerShell 内でのみ表示されます。

    PowerShell は内部的に拡張型の既定のセットを定義します。この型情報は
    起動時にすべての PowerShell セッションに読み込まれます。DateTime
    プロパティはこの既定セットの一部です。PowerShell 6 より前は、型定義は
    PowerShell インストールディレクトリ ($PSHOME) の Types.ps1xml ファイル
    に格納されていました。

  PowerShell への拡張型データの追加

    PowerShell セッションにおける拡張型データには 3 つのソースがあります。

    - PowerShell によって定義され、すべての PowerShell セッションに自動的に
      読み込まれる拡張型データ。PowerShell 6 以降、この情報は PowerShell に
      コンパイルされており、Types.ps1xml ファイルとして提供されなくなりました。

    - モジュールがエクスポートする Types.ps1xml ファイル。これらは、
      モジュールが現在のセッションにインポートされるときに読み込まれます。

    - Update-TypeData コマンドレットを使用して定義される拡張型データ。
      これは現在のセッションにのみ追加され、ファイルには保存されません。

    セッション内では、これら 3 つのソースからの拡張型データは同じ方法で
    オブジェクトに適用され、指定された型のすべてのオブジェクトで利用
    できます。

  TypeData コマンドレット

    次のコマンドレットは、PowerShell 3.0 以降の
    Microsoft.PowerShell.Utility モジュールに含まれています。

    - Get-TypeData: 現在のセッションの拡張型データを取得します。
    - Update-TypeData: Types.ps1xml ファイルを再読み込みします。現在の
      セッションに拡張型データを追加します。
    - Remove-TypeData: 現在のセッションから拡張型データを削除します。

    これらのコマンドレットの詳細については、各コマンドレットのヘルプ
    トピックを参照してください。

  組み込みの Types.ps1xml ファイル

    $PSHOME ディレクトリの Types.ps1xml ファイルは、すべてのセッションに
    自動的に追加されます。

    PowerShell インストールディレクトリ ($PSHOME) の Types.ps1xml ファイルは
    XML ベースのテキストファイルで、PowerShell で使用されるオブジェクトに
    プロパティとメソッドを追加できます。PowerShell には、.NET 型に
    いくつかの要素を追加する組み込みの Types.ps1xml ファイルがありますが、
    追加の Types.ps1xml ファイルを作成して型をさらに拡張できます。

    たとえば、既定では配列オブジェクト (System.Array) には、配列内の
    オブジェクト数を示す Length プロパティがあります。しかし、Length
    という名前ではプロパティの内容が明確に説明されないため、PowerShell は
    同じ値を表示する Count という名前のエイリアスプロパティを追加します。
    次の XML は、System.Array 型に Count プロパティを追加します。

        <Type>
          <Name>System.Array</Name>
          <Members>
            <AliasProperty>
              <Name>Count</Name>
              <ReferencedMemberName>
                Length
              </ReferencedMemberName>
            </AliasProperty>
          </Members>
        </Type>

    新しい AliasProperty を取得するには、次の例のように任意の配列に対して
    Get-Member コマンドを使用します。

        Get-Member -InputObject (1,2,3,4)

    このコマンドは次の結果を返します。

        Name MemberType Definition
        ---- ---------- ----------
        Count AliasProperty Count = Length
        Address Method System.Object& Address(Int32)
        Clone Method System.Object Clone()
        CopyTo Method System.Void CopyTo(Array array, Int32 index):
        Equals Method System.Boolean Equals(Object obj)
        Get Method System.Object Get(Int32)
        # ...

    その結果、PowerShell では配列の Count プロパティと Length プロパティの
    どちらも使用できます。たとえば次のとおりです。

        (1, 2, 3, 4).Count
        4

        (1, 2, 3, 4).Length
        4

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

    PowerShell とともにインストールされる .ps1xml ファイルは、書式に
    スクリプトブロックを含めることができるため、改ざんを防ぐためにデジタル
    署名されています。したがって、.NET 型にプロパティやメソッドを追加するには、
    独自の Types.ps1xml ファイルを作成し、PowerShell セッションに追加します。

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

    新しいファイルを保存したら、Update-TypeData コマンドレットを使用して
    新しいファイルを PowerShell セッションに追加します。定義された組み込みの
    型よりも自分の型を優先させたい場合は、Update-TypeData コマンドレットの
    PrependData パラメーターを使用します。Update-TypeData は現在のセッション
    にのみ影響します。今後のすべてのセッションに変更を適用するには、
    コンソールをエクスポートするか、Update-TypeData コマンドを PowerShell
    プロファイルに追加します。

  Types.ps1xml と Add-Member

    Types.ps1xml ファイルは、影響を受ける PowerShell セッション内で、指定
    された .NET 型のすべてのオブジェクトインスタンスにプロパティとメソッドを
    追加します。ただし、1 つのオブジェクトインスタンスにのみプロパティや
    メソッドを追加する必要がある場合は、Add-Member コマンドレットを使用
    します。詳細については、Add-Member を参照してください。

  例: FileInfo オブジェクトへの Age メンバーの追加

    この例では、System.IO.FileInfo オブジェクトに Age プロパティを追加する
    方法を示します。ファイルの経過日数は、作成時刻と現在時刻との差(日数)です。

    Age プロパティはスクリプトブロックを使用して計算されるため、新しい Age
    プロパティのひな形として <ScriptProperty> タグを使用します。

    次の XML コードをファイル $PSHOME\MyTypes.ps1xml に保存します。

        <?xml version="1.0" encoding="utf-8" ?>
        <Types>
          <Type>
            <Name>System.IO.FileInfo</Name>
            <Members>
              <ScriptProperty>
                <Name>Age</Name>
                <GetScriptBlock>
                  ((Get-Date) - ($this.CreationTime)).Days
                </GetScriptBlock>
              </ScriptProperty>
            </Members>
          </Type>
        </Types>

    Update-TypeData を実行して、新しい Types.ps1xml ファイルを現在の
    セッションに追加します。このコマンドは PrependData パラメーターを使用して、
    新しいファイルを元の定義より高い優先順位に配置します。Update-TypeData の
    詳細については、Update-TypeData を参照してください。

        Update-TypeData -PrependPath $PSHOME\MyTypes.ps1xml

    変更をテストするには、Get-ChildItem コマンドを実行して $PSHOME ディレクトリ
    内のファイルを取得し、Format-List コマンドレットにパイプしてファイルの
    すべてのプロパティを一覧表示します。変更の結果、Age プロパティが一覧に
    表示されます。

        Get-ChildItem $PSHOME\pwsh.exe | Select-Object Age

        142

  Types.ps1xml ファイル内の XML

    完全なスキーマ定義は、GitHub の PowerShell ソースコードリポジトリ内の
    Types.xsd に記載されています。

    <Types> タグは、ファイルで定義されているすべての型を囲みます。<Types>
    タグは 1 つだけ存在する必要があります。

    ファイル内で言及される各 .NET 型は、<Type> タグで表される必要があります。

    型タグには、次のタグを含める必要があります。

    <Name>: 影響を受ける .NET 型の名前を囲みます。

    <Members>: .NET 型に対して定義される新しいプロパティとメソッドの
    タグを囲みます。

    <Members> タグの内側には、次のメンバータグのいずれかを配置できます。

  AliasProperty

    既存のプロパティに新しい名前を定義します。

    <AliasProperty> タグには、新しいプロパティの名前を指定する <Name> タグと、
    既存のプロパティを指定する <ReferencedMemberName> タグが必要です。

    たとえば、Count エイリアスプロパティは、配列オブジェクトの Length
    プロパティのエイリアスです。

        <Type>
          <Name>System.Array</Name>
          <Members>
            <AliasProperty>
              <Name>Count</Name>
              <ReferencedMemberName>Length</ReferencedMemberName>
            </AliasProperty>
          </Members>
        </Type>

  CodeMethod

    .NET クラスの静的メソッドを参照します。

    <CodeMethod> タグには、新しいメソッドの名前を指定する <Name> タグと、
    メソッドが定義されているコードを指定する <CodeReference> タグが必要です。

    たとえば、ToString メソッドは
    Microsoft.PowerShell.ToStringCodeMethods コード定義の名前です。

        <Type>
          <Name>System.Xml.XmlNode</Name>
          <Members>
            <CodeMethod>
              <Name>ToString</Name>
              <CodeReference>
                <TypeName>Microsoft.PowerShell.ToStringCodeMethods</TypeName>
                <MethodName>XmlNode</MethodName>
              </CodeReference>
            </CodeMethod>
          </Members>
        </Type>

  CodeProperty

    .NET クラスの静的メソッドを参照します。

    <CodeProperty> タグには、新しいプロパティの名前を指定する <Name> タグと、
    プロパティが定義されているコードを指定する <GetCodeReference> タグが
    必要です。

    たとえば、System.IO.DirectoryInfo オブジェクトの Mode プロパティは、
    PowerShell の FileSystem プロバイダーで定義されたコードプロパティです。

        <Type>
          <Name>System.IO.DirectoryInfo</Name>
          <Members>
            <CodeProperty>
              <Name>Mode</Name>
              <GetCodeReference>
                <TypeName>
                  Microsoft.PowerShell.Commands.FileSystemProvider
                </TypeName>
                <MethodName>Mode</MethodName>
              </GetCodeReference>
            </CodeProperty>
          </Members>
        </Type>

  MemberSet

    メンバー(プロパティとメソッド)のコレクションを定義します。

    <MemberSet> タグは、主要な <Members> タグの内側に出現します。これらの
    タグは、メンバーセットの名前を囲む <Name> タグと、セット内のメンバー
    (プロパティとメソッド)を囲む二次的な <Members> タグを囲む必要があります。
    プロパティを作成するタグ(<NoteProperty> や <ScriptProperty> など)や
    メソッドを作成するタグ(<Method> や <ScriptMethod> など)はいずれも、
    セットのメンバーになれます。

    Types.ps1xml ファイルでは、<MemberSet> タグは PowerShell における .NET
    オブジェクトの既定のビューを定義するために使用されます。この場合、
    メンバーセットの名前(<Name> タグ内の値)は常に PsStandardMembers であり、
    プロパティの名前(<Name> タグの値)は次のいずれかになります。

    - DefaultDisplayProperty: オブジェクトの単一のプロパティ。

    - DefaultDisplayPropertySet: オブジェクトの 1 つ以上のプロパティ。

    - DefaultKeyPropertySet: オブジェクトの 1 つ以上のキープロパティ。
      キープロパティは、セッション履歴内の項目の ID 番号など、プロパティ値の
      インスタンスを識別します。

    たとえば、次の XML は、Get-Service コマンドレットが返すサービス
    (System.ServiceProcess.ServiceController オブジェクト) の既定の表示を
    定義します。これは、既定のプロパティセットと既定の表示プロパティから
    なる PsStandardMembers という名前のメンバーセットを定義します。既定の
    プロパティセットを Status、Name、DisplayName プロパティとして定義し、
    既定の表示プロパティを Name として定義します。

        <Type>
          <Name>System.ServiceProcess.ServiceController</Name>
          <Members>
            <MemberSet>
              <Name>PSStandardMembers</Name>
              <Members>
                <PropertySet>
                  <Name>DefaultDisplayPropertySet</Name>
                  <ReferencedProperties>
                    <Name>Status</Name>
                    <Name>Name</Name>
                    <Name>DisplayName</Name>
                  </ReferencedProperties>
                </PropertySet>
                <NoteProperty>
                  <Name>DefaultDisplayProperty</Name>
                  <Value>Name</Value>
                </NoteProperty>
              </Members>
            </MemberSet>
          </Members>
        </Type>

    <Method>: 基になるオブジェクトのネイティブメソッドを参照します。

    <Methods>: オブジェクトのメソッドのコレクションです。

  NoteProperty

    静的な値を持つプロパティを定義します。

    <NoteProperty> タグには、新しいプロパティの名前を指定する <Name> タグと、
    プロパティの値を指定する <Value> タグが必要です。

    たとえば、次の XML は System.IO.DirectoryInfo オブジェクトの Status
    プロパティを作成します。Status プロパティの値は常に Success です。

        <Type>
          <Name>System.IO.DirectoryInfo</Name>
          <Members>
            <NoteProperty>
              <Name>Status</Name>
              <Value>Success</Value>
            </NoteProperty>
          </Members>
        </Type>

  PropertySet

    引数を取り値を返すプロパティです。

    <Properties>: オブジェクトのプロパティのコレクションです。

    <Property>: 基になるオブジェクトのプロパティです。

    <PropertySet>: オブジェクトのプロパティのコレクションを定義します。

    <PropertySet> タグには、プロパティセットの名前を指定する <Name> タグと、
    プロパティを指定する <ReferencedProperty> タグが必要です。プロパティの
    名前は <Name> タグで囲みます。

    Types.ps1xml では、<PropertySet> タグは、オブジェクトの既定の表示の
    ためのプロパティセットを定義するために使用されます。既定の表示は、
    <MemberSet> タグの <Name> タグ内の値 PsStandardMembers によって識別
    できます。

    たとえば、次の XML は、3 つの ReferencedProperties を持つ
    DefaultDisplayPropertySet という名前の PropertySet を作成します。

        <Type>
          <Name>System.ServiceProcess.ServiceController</Name>
          <Members>
            <MemberSet>
              <Name>PSStandardMembers</Name>
              <Members>
                <PropertySet>
                  <Name>DefaultDisplayPropertySet</Name>
                  <ReferencedProperties>
                    <Name>Status</Name>
                    <Name>Name</Name>
                    <Name>DisplayName</Name>
                  </ReferencedProperties>
                </PropertySet>
              </Members>
            </MemberSet>
          </Members>
        </Type>

  ScriptMethod

    スクリプトの出力を値とするメソッドを定義します。

    <ScriptMethod> タグには、新しいメソッドの名前を指定する <Name> タグと、
    メソッドの結果を返すスクリプトブロックを囲む <Script> タグが必要です。

    たとえば、管理オブジェクト (System.System.Management.ManagementObject) の
    ConvertToDateTime メソッドと ConvertFromDateTime メソッドは、
    System.Management.ManagementDateTimeConverter クラスの静的メソッド
    ToDateTime と ToDmtfDateTime を使用するスクリプトメソッドです。

        <Type>
         <Name>System.Management.ManagementObject</Name>
         <Members>
         <ScriptMethod>
           <Name>ConvertToDateTime</Name>
           <Script>
           [System.Management.ManagementDateTimeConverter]::ToDateTime($args[0])
           </Script>
         </ScriptMethod>
         <ScriptMethod>
           <Name>ConvertFromDateTime</Name>
           <Script>
           [System.Management.ManagementDateTimeConverter]::ToDmtfDateTime($args[0])
           </Script>
         </ScriptMethod>
         </Members>
        </Type>

  ScriptProperty

    スクリプトの出力を値とするプロパティを定義します。

    <ScriptProperty> タグには、新しいプロパティの名前を指定する <Name> タグと、
    プロパティの値を返すスクリプトブロックを囲む <GetScriptBlock> タグが
    必要です。

    たとえば、System.IO.FileInfo オブジェクトの VersionInfo プロパティは、
    System.Diagnostics.FileVersionInfo オブジェクトの GetVersionInfo 静的
    メソッドの FullName プロパティを使用した結果となるスクリプトプロパティ
    です。

        <Type>
          <Name>System.IO.FileInfo</Name>
          <Members>
            <ScriptProperty>
              <Name>VersionInfo</Name>
              <GetScriptBlock>
              [System.Diagnostics.FileVersionInfo]::GetVersionInfo($this.FullName)
              </GetScriptBlock>
            </ScriptProperty>
          </Members>
        </Type>

    詳細については、Windows PowerShell ソフトウェア開発キット (SDK) を
    参照してください。

  Update-TypeData

    Types.ps1xml ファイルを PowerShell セッションに読み込むには、
    Update-TypeData コマンドレットを実行します。ファイル内の型を組み込みの
    Types.ps1xml ファイルの型より優先させたい場合は、Update-TypeData の
    PrependData パラメーターを追加します。Update-TypeData は現在のセッション
    にのみ影響します。今後のすべてのセッションに変更を適用するには、
    セッションをエクスポートするか、Update-TypeData コマンドを PowerShell
    プロファイルに追加します。

    プロパティ内で発生する例外、または Update-TypeData コマンドにプロパティを
    追加したことで発生する例外は、StdErr にエラーを報告しません。これは、
    書式設定や出力の際に多くの一般的な型で発生する例外を抑制するためです。
    .NET プロパティを取得する場合、次の例のようにメソッド構文を代わりに
    使用することで、例外の抑制を回避できます。

        "hello".get_Length()

    メソッド構文は .NET プロパティでのみ使用できることに注意してください。
    Update-TypeData コマンドレットを実行して追加されたプロパティでは、
    メソッド構文を使用できません。

  Types.ps1xml ファイルへの署名

    Types.ps1xml ファイルの利用者を保護するには、デジタル署名を使用して
    ファイルに署名できます。詳細については、about_Signing を参照してください。

関連項目
    about_Signing
    Copy-Item
    Copy-ItemProperty
    Get-Member
    Get-TypeData
    Remove-TypeData
    Update-TypeData

----
原文: PowerShell-Docs (CC BY 4.0) の翻訳 / PSHelpJaJP