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 |