PowerShell HelpFile - about_types.ps1xml
 記事記号:[me1590] 初版:2011/May/10

この文書は、Windows PowerShellのヘルプ機能で表示される内容を再構成したものです。

トピック
    about_Types.ps1xml

簡易説明
    Windows PowerShell で使用される Microsoft .NET Framework 型のオブジェクトを
    拡張する Types.ps1xml ファイルについて説明します。

詳細説明
    Windows PowerShell のインストール ディレクトリ ($pshome) にある Types.ps1xml 
    ファイルは、Windows PowerShell で使用されているオブジェクトにプロパティやメ
    ソッドを追加できるようにする、XML ベースのテキスト ファイルです。Windows Pow
    erShell には、.NET Framework の型にいくつかの要素を追加した、組み込みの Type
    s.ps1xml ファイルがあらかじめ用意されています。ただし、別途 Types.ps1xml 
    ファイルを作成して、これらの型を拡張することができます。

    たとえば、既定では、配列オブジェクト (System.Array) には、配列内のオブジェク
    ト数を一覧表示する Length プロパティがあります。ただし、"length" という名前
    ではプロパティの意味が正確に伝わらないため、Windows PowerShell には、同じ値
    を表示する、"Count" と名前のエイリアス プロパティが追加されています。次の XM
    L は、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 )
	...

    したがって、Windows PowerShell では、Count プロパティまたは Length プロパテ
    ィのどちらを使用しても同じ結果が得られます。次にその例を示します。

	C:\PS> (1, 2, 3, 4).count
	4

	C:\PS> (1, 2, 3, 4).length
	4
 

  Types.ps1xml ファイルの新規作成

      Windows PowerShell と共にインストールされた .ps1xml ファイルは、改ざんを
      防止するためにデジタル署名されています。書式設定にはスクリプト ブロックを
      含めることができるためです。したがって、.NET Framework 型にプロパティまた
      はメソッドを追加するには、独自の Types.ps1xml ファイルを作成し、それを Wi
      ndows PowerShell コンソールに追加するようにします。

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

      新しいファイルを保存するときに、Update-TypeData コマンドレットを使用して Wi
      ndows PowerShell コンソールに新規ファイルを追加します。組み込みファイルに定
      義されている型よりも優先させる型がある場合は、Update-TypeData コマンドレッ
      トの PrependData パラメーターを使用します。Update-TypeData は、現在のコンソ
      ールにのみ有効です。将来のすべてのコンソールを変更するには、コンソールをエ
      クスポートするか、Windows PowerShell プロファイルに Update-TypeData コマン
      ドを追加します。


  Types.ps1xml と Add-Member

      Types.ps1xml ファイルでプロパティやメソッドを追加すると、その影響下にある 
      Windows PowerShell コンソールで指定された .NET Framework 型オブジェクトの
      すべてのインスタンスにそれらのプロパティやメソッドが追加されます。ただし、
      オブジェクトの特定のインスタンスに対してのみプロパティまたはメソッド
      を追加する必要がある場合は、Add-Member コマンドレットを使用します。

      詳細については、「Add-Member」を参照してください。


  例: Age Member を FileInfo オブジェクトに追加する

      ここでは、ファイル オブジェクト (System.IO.FileInfo) に Age プロパティを追
      加する例を紹介します。ファイルの Age (年齢) とは、作成時刻と現在時刻の差を
      日数で表したものです。

      新しいファイルを作成するには、元の Types.ps1xml ファイルをひな形として使用
      するのが最も簡単です。次のコマンドで、$pshome ディレクトリの MyTypes.ps1xm
      l ファイルに元のファイルをコピーします。

          copy-item Types.ps1xml MyTypes.ps1xml


      次に、XML エディター、またはメモ帳などのテキスト エディターで Types.ps1xml 
      ファイルを開きます。Age プロパティはスクリプト ブロックを使用して計算され
      るので、新しい Age プロパティのモデルとして使用する <ScriptProperty> タグ
      を探します。

      このコードの <Type> タグから </Type> タグまでの XML をコピーして、スクリプ
      ト プロパティを作成します。それ以外の部分は、開始の <?xml> タグと <Types> 
      タグ、および終了の </Types> タグだけを残すようにして、すべて削除します。ま
      た、エラーを防ぐために、デジタル署名は忘れずに削除してください。

      元の Types.ps1xml ファイルからスクリプト プロパティをコピーし、次のような
      スクリプト プロパティが完成しました。これをモデルとして使用します。

          <?xml version="1.0" encoding="utf-8" ?>
          <Types>
              <Type>
                 <Name>System.Guid</Name>
                    <Members>
                        <ScriptProperty>
                            <Name>Guid</Name>
                            <GetScriptBlock>$this.ToString()</GetScriptBlock>
                        </ScriptProperty>
                    </Members>
              </Type>
          </Types>


      今度は、.NET Framework 型の名前、プロパティの名前、およびスクリプト ブロッ
      クの値を変更して、ファイル オブジェクトの Age プロパティを作成します。


          <?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 ディレ
      クトリの PowerShell.exe ファイルを取得し、パイプで Format-List コマンドレ
      ットに渡して、このファイルのすべてのプロパティを一覧表示します。変更結果と
      して、Age プロパティが表示されます。

        get-childitem $pshome\powershell.exe | format-list -property *	


        PSPath            : Microsoft.PowerShell.Core\FileSystem::C:\WINDOWS...
        PSParentPath      : Microsoft.PowerShell.Core\FileSystem::C:\WINDOWS...
        PSChildName       : powershell.exe
        PSDrive           : C
        PSProvider        : Microsoft.PowerShell.Core\FileSystem
        PSIsContainer     : False
        Age               : 16
        VersionInfo       : File:             C:\WINDOWS\system32\WindowsPow...
                    InternalName:     POWERSHELL
                    OriginalFilename: PowerShell.EXE
	...


      次のコマンドを使用して、ファイルの Age プロパティを表示することもできます。

	  (get-childitem $pshome\powershell.exe).age
          16
 

  Types.ps1xml ファイルの XML

      <Types> タグは、そのファイルに定義されているすべての型を囲むように存在しま
      す。<Types> タグは 1 対しか存在できません。

      このファイルで言及されている各 .NET Framework 型は、1 対の <Type> タグで表
      現されます。

      Type タグは、次のタグを含んでいる必要があります。

          <Name>: 対象の .NET Framework 型の名前を囲む 1 対の <Name> タグ。

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

      <Members> タグ内には、次のメンバー タグを含めることができます。

      <AliasProperty>: 既存のプロパティの新しい名前を定義します。

         <AliasProperty> タグには、新しいプロパティの名前を定義する 1 対の <Nam
         e> タグと、既存のプロパティを指定する 1 対の <ReferencedMemberName> タ
         グが必要です。たとえば、Count エイリアス プロパティは、配列オブジェク
         トの Length プロパティのエイリアスです。

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


      <CodeMethod>: .NET Framework クラスの静的メソッドを参照します。

         <CodeMethod> タグには、新しいメソッドの名前を定義する 1 対の <Name> タ
         グと、メソッドの定義先のコードを指定する 1 対の <GetCodeReference> タ
         グが必要です。
         たとえば、ディレクトリ (System.IO.DirectoryInfo オブジェクト) の Mode 
         プロパティは、Windows PowerShell FileSystem プロバイダーに定義されたコ
         ード プロパティです。
        
             <Type>
                 <Name>System.IO.DirectoryInfo</Name>
                 <Members>
                     <CodeProperty>
                        <Name>Mode</Name>
                        <GetCodeReference>
                           <TypeName>Microsoft.PowerShell.Commands.FileSystemPro
                           vider</TypeName>
                           <MethodName>Mode</MethodName>
                        </GetCodeReference>
                     </CodeProperty>
                 </Members>
             </Type>

 
      <CodeProperty>: .NET Framework クラスの静的メソッドを参照します。

         <CodeProperty> タグには、新しいプロパティの名前を定義する 1 対の <Name> 
         タグと、プロパティの定義先のコードを指定する 1 対の <GetCodeReference> 
         タグが必要です。
         たとえば、ディレクトリ (System.IO.DirectoryInfo オブジェクト) の Mode 
         プロパティは、Windows PowerShell FileSystem プロバイダーに定義されたコ
         ード プロパティです。

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


      <MemberSet>: メンバー (プロパティおよびメソッド) のコレクションを定義します。

         <MemberSet> タグは、プライマリ <Members> タグ内に存在する必要があります。
         このタグは、メンバー セットの名前を囲む 1 対の <Name> タグと、そのセット
         内のメンバー (プロパティおよびメソッド) を囲む 1 対のセカンダリ <Member
         s> タグを含んでいる必要があります。プロパティを作成するタグ (<NotePrope
         rty>、<ScriptProperty> など) やメソッドを作成するタグ (<Method>、<Scrip
         tMethod> など) はすべて、このセットのメンバーとして追加することができます。

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

	    - DefaultDisplayProperty: オブジェクトのプロパティ (1 つ)。

            - DefaultDisplayPropertySet: オブジェクトのプロパティ (1 つまたは複数)。

            - DefaultKeyPropertySet: オブジェクトのキー プロパティ (1 つまたは複
              数)。キー プロパティは、セッション履歴の項目の ID 番号など、プロパ
              ティ値のインスタンスを識別するためのプロパティです。

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

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


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

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

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

         <NoteProperty> タグには、新しいプロパティの名前を定義する 1 対の <Name> 
         タグと、その値を指定する 1 対の <Value> タグが必要です。
         たとえば、次の XML は、ディレクトリ (System.IO.DirectoryInfo オブジェク
         ト) の Status プロパティを作成します。Status プロパティの値は常に "Succ
          ess" です。

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


      <ParameterizedProperty>: 引数を受け取り、値を返すプロパティです。

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

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

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

         <PropertySet> タグには、プロパティ セットの名前を定義する 1 対の <Name> 
         タグと、セット内の各プロパティを指定する 1 対の <ReferencedProperty> タ
         グが必要です。プロパティの名前は、1 対の <Name> タグで囲む必要があります。

         Types.ps1xml では、<PropertySet> タグを使用して、オブジェクトの既定の表
         示に対する一連のプロパティを定義します。既定の表示は、<MemberSet> タグ
         の <Name> タグの値 ("PsStandardMembers") で識別できます。

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

             <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> タグには、新しいメソッドの名前を指定する 1 対の <Name> 
         タグと、メソッドの結果を返すスクリプト ブロックを囲む 1 対の <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]::To
                             DateTime($args[0])
                         </Script>
                     </ScriptMethod>
                     <ScriptMethod>
                         <Name>ConvertFromDateTime</Name>
                         <Script>
                             [System.Management.ManagementDateTimeConverter]::To
                             DmtfDateTime($args[0])
                         </Script>
                     </ScriptMethod>
                 </Members>
             </Type>


      <ScriptProperty>: 値がスクリプトの出力であるプロパティを定義します。

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

         たとえば、ファイル (System.IO.FileInfo objects) の VersionInfo プロパテ
         ィは、System.Diagnostics.FileVersionInfo オブジェクトの静的メソッド Get
         VersionInfo の FullName プロパティの結果として得られるスクリプト プロパ
         ティです。

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


      詳細については、MSDN (Microsoft Developer Network) ライブラリの「Windows P
      owerShell SDK」(http://go.microsoft.com/fwlink/?LinkId=144538) を参照して
      ください。


  Update-TypeData
    
      Windows PowerShell コンソールに Types.ps1xml ファイルを読み込むには、Updat
      e-TypeData コマンドレットを使用します。組み込みの Types.ps1xml ファイルに定
      義されている型よりも、独自に定義したファイルの型を優先させる場合は、Update-
      TypeData の PrependData パラメーターを使用します。Update-TypeData は、現在
      のコンソールにのみ有効です。将来のすべてのコンソールを変更するには、コンソ
      ールをエクスポートするか、Windows PowerShell プロファイルに Update-TypeData 
      コマンドを追加します。


  Types.ps1xml ファイルの署名

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

関連項目
    about_Signing
    Copy-Item
    Get-Member
    Update-TypeData
    	
記事で解説しているパソコンの環境
 基本ソフト: Windows 7
 キーワード: Windows PowerShell、ヘルプ、HelpFile、about_types.ps1xml
ご利用数: 1969078
感想・要望・問い合わせは こちら