Add-Member
PowerShell オブジェクトのインスタンスにカスタム プロパティとメソッドを追加します。
構文
Add-Member
-InputObject <PSObject>
-TypeName <String>
[-PassThru]
[<CommonParameters>]
Add-Member
[-NotePropertyMembers] <IDictionary>
-InputObject <PSObject>
[-TypeName <String>]
[-Force]
[-PassThru]
[<CommonParameters>]
Add-Member
[-NotePropertyName] <String>
[-NotePropertyValue] <Object>
-InputObject <PSObject>
[-TypeName <String>]
[-Force]
[-PassThru]
[<CommonParameters>]
Add-Member
[-MemberType] <PSMemberTypes>
[-Name] <String>
[[-Value] <Object>]
[[-SecondValue] <Object>]
-InputObject <PSObject>
[-TypeName <String>]
[-Force]
[-PassThru]
[<CommonParameters>]
説明
Add-Member
コマンドレットを使用すると、PowerShell オブジェクトのインスタンスにメンバー (プロパティとメソッド) を追加できます。 たとえば、オブジェクトの説明を含む NoteProperty メンバーや、オブジェクトを変更するスクリプトを実行する ScriptMethod メンバーを追加できます。
Add-Member
を使用するには、オブジェクトをパイプ処理して Add-Member
するか、InputObject パラメーターを使用してオブジェクトを指定します。
MemberType パラメーターは、追加するメンバーの種類を示します。 Name パラメーターは新しいメンバーに名前を割り当て、Value パラメーターはメンバーの値を設定します。
追加するプロパティとメソッドは、指定したオブジェクトの特定のインスタンスにのみ追加されます。
Add-Member
オブジェクトの種類は変更されません。 新しいオブジェクトの種類を作成するには、Add-Type
コマンドレットを使用します。
Export-Clixml
コマンドレットを使用して、追加のメンバーを含むオブジェクトのインスタンスをファイルに保存することもできます。 その後、 Import-Clixml
コマンドレットを使用して、エクスポートされたファイルに格納されている情報からオブジェクトのインスタンスを再作成できます。
Windows PowerShell 3.0 以降、Add-Member
には、オブジェクトにノート プロパティを簡単に追加できる新機能があります。
NotePropertyName および NotePropertyValue パラメーター 使用して、ノート プロパティを定義したり、メモ プロパティの名前と値のハッシュ テーブルを取得する NotePropertyMembers パラメーターを使用したりできます。
また、Windows PowerShell 3.0 以降では、出力オブジェクトを生成する PassThru パラメーターが必要になる頻度が低くなります。
Add-Member
、新しいメンバーが、より多くの型の入力オブジェクトに直接追加されるようになりました。 詳細については、PassThru パラメーターの説明を参照してください。
例
例 1: PSObject にメモ プロパティを追加する
次の使用例は、 ファイルを表す FileInfo オブジェクトに、値が "Done" の Test.txt
note プロパティを追加します。
最初のコマンドでは、Get-ChildItem
コマンドレットを使用して、 ファイルを表す Test.txt
オブジェクトを取得します。
$a
変数に保存されます。
2 番目のコマンドは、note プロパティを $a
のオブジェクトに追加します。
3 番目のコマンドでは、ドット表記を使用して、のオブジェクトの $a
プロパティの値を取得します。 出力が示すように、値は "Done" です。
$A = Get-ChildItem c:\ps-test\test.txt
$A | Add-Member -NotePropertyName Status -NotePropertyValue Done
$A.Status
Done
例 2: PSObject にエイリアス プロパティを追加する
次の例では、 ファイルを表すオブジェクトに Test.txt
エイリアス プロパティを追加します。 新しいプロパティは、Length プロパティのエイリアスです。
最初のコマンドでは、Get-ChildItem
コマンドレットを使用して、Test.txt
FileInfo オブジェクトを取得します。
2 番目のコマンドは、Size エイリアス プロパティを追加します。 3 番目のコマンドでは、ドット表記を使用して、新しい Size プロパティの値を取得します。
$A = Get-ChildItem C:\Temp\test.txt
$A | Add-Member -MemberType AliasProperty -Name Size -Value Length
$A.Size
2394
例 3: StringUse Note プロパティを文字列に追加する
次の使用例は、StringUse note プロパティを文字列に追加します。
Add-Member
は String 入力オブジェクトに型を追加できないため、PassThru パラメータを指定して出力オブジェクトを生成できます。 この例の最後のコマンドは、新しいプロパティを表示します。
この例では、NotePropertyMembers パラメーターを使用します。 NotePropertyMembers パラメーターの値はハッシュ テーブルです。 キーはノート プロパティ名 StringUseで、値はノート プロパティの値 表示です。
$A = "A string"
$A = $A | Add-Member -NotePropertyMembers @{StringUse="Display"} -PassThru
$A.StringUse
Display
例 4: FileInfo オブジェクトにスクリプト メソッドを追加する
この例では、FileInfo オブジェクトに SizeInMB スクリプト メソッドを追加し、ファイル サイズを最も近いメガバイトに計算します。 2 番目のコマンドでは、Round 静的メソッドを使用する ScriptBlock を [math]
型から 2 番目の小数点に丸めます。
Value パラメーターは、現在のオブジェクトを表す $This
自動変数も使用します。
$This
変数は、新しいプロパティとメソッドを定義するスクリプト ブロックでのみ有効です。
最後のコマンドでは、ドット表記を使用して、 変数内のオブジェクトに対して新しい $A
スクリプト メソッドを呼び出します。
$A = Get-ChildItem C:\Temp\test.txt
$S = {[math]::Round(($this.Length / 1MB), 2)}
$A | Add-Member -MemberType ScriptMethod -Name "SizeInMB" -Value $S
$A.SizeInMB()
0.43
例 5: オブジェクトのすべてのプロパティを別のオブジェクトにコピーする
この関数は、あるオブジェクトのすべてのプロパティを別のオブジェクトにコピーします。
foreach
ループでは、Get-Member
コマンドレットを使用して、From オブジェクトの各プロパティを取得します。
foreach
ループ内のコマンドは、各プロパティで直列に実行されます。
Add-Member
コマンドは、From オブジェクトのプロパティを NoteProperty として To オブジェクトに追加します。 値は Value パラメータを使用してコピーされます。
Force パラメータを使用して、同じメンバー名を持つメンバーを追加します。
function Copy-Property ($From, $To)
{
$properties = Get-Member -InputObject $From -MemberType Property
foreach ($p in $properties)
{
$To | Add-Member -MemberType NoteProperty -Name $p.Name -Value $From.$($p.Name) -Force
}
}
例 6: カスタム オブジェクトを作成する
次の使用例は、Asset カスタム オブジェクトを作成します。
New-Object
コマンドレットは PSObject を作成します。 この例では、 PSObject を $Asset
変数に保存します。
2 番目のコマンドは、 [ordered]
型アクセラレータを使用して、名前と値の順序付きディクショナリを作成します。 このコマンドは、結果を $D
変数に保存します。
3 番目のコマンドでは、 コマンドレットの Add-Member
パラメーターを使用して、$D
変数のディクショナリを PSObject に追加します。
TypeName プロパティによって、PSObject に新しい名前 Asset が割り当てられます。
最後のコマンドは、新しい Asset オブジェクトを Get-Member
コマンドレットにパイプします。 出力は、オブジェクトのタイプ名が Asset で、順序付きディクショナリで定義したノートプロパティを持っていることを示しています。
$Asset = New-Object -TypeName PSObject
$d = [ordered]@{Name="Server30";System="Server Core";PSVersion="4.0"}
$Asset | Add-Member -NotePropertyMembers $d -TypeName Asset
$Asset | Get-Member
TypeName: Asset
Name MemberType Definition
---- ---------- ----------
Equals Method bool Equals(System.Object obj)
GetHashCode Method int GetHashCode()
GetType Method type GetType()
ToString Method string ToString()
Name NoteProperty System.String Name=Server30
PSVersion NoteProperty System.String PSVersion=4.0
System NoteProperty System.String System=Server Core
パラメーター
-Force
オブジェクトに同じ名前のカスタム メンバーがある場合でも、このコマンドレットによって新しいメンバーが追加されることを示します。 Force パラメーターを使用して、型の標準メンバーを置き換えることはできません。
型: | SwitchParameter |
配置: | Named |
規定値: | None |
必須: | False |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | False |
-InputObject
新しいメンバーが追加されるオブジェクトを指定します。 オブジェクトを含む変数を入力するか、オブジェクトを取得するコマンドまたは式を入力します。
型: | PSObject |
配置: | Named |
規定値: | None |
必須: | True |
パイプライン入力を受け取る: | True |
ワイルドカード文字を受け取る: | False |
-MemberType
追加するメンバーの型を指定します。 このパラメーターは必須です。 このパラメーターに使用できる値は次のとおりです。
- NoteProperty (ノートプロパティ)
- エイリアスプロパティ
- スクリプトプロパティ
- コードプロパティ
- スクリプトメソッド
- コードメソッド
これらの値の詳細については、MSDN ライブラリの「 PSMemberTypes 列挙 体」を参照してください。
すべてのオブジェクトに、すべての種類のメンバーがあるわけではありません。 オブジェクトに含まれていないメンバー型を指定すると、PowerShell はエラーを返します。
型: | PSMemberTypes |
Aliases: | Type |
指定可能な値: | AliasProperty, CodeProperty, Property, NoteProperty, ScriptProperty, Properties, PropertySet, Method, CodeMethod, ScriptMethod, Methods, ParameterizedProperty, MemberSet, Event, Dynamic, All |
配置: | 0 |
規定値: | None |
必須: | True |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | False |
-Name
このコマンドレットが追加するメンバーの名前を指定します。
型: | String |
配置: | 1 |
規定値: | None |
必須: | True |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | False |
-NotePropertyMembers
ハッシュ テーブルまたはノート プロパティの名前と値の順序付きディクショナリを指定します。 キーがノート プロパティ名で、値がノート プロパティ値であるハッシュ テーブルまたはディクショナリを入力します。
PowerShell でのハッシュ テーブルと順序付きディクショナリの詳細については、「about_Hash_Tables」を参照してください。
このパラメーターは、Windows PowerShell 3.0 で導入されました。
型: | IDictionary |
配置: | 0 |
規定値: | None |
必須: | True |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | False |
-NotePropertyName
メモ プロパティ名を指定します。
このパラメーターは、NotePropertyValue パラメーター 使用します。 このパラメーターは省略可能です。
このパラメーターは、Windows PowerShell 3.0 で導入されました。
型: | String |
配置: | 0 |
規定値: | None |
必須: | True |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | False |
-NotePropertyValue
メモ プロパティの値を指定します。
NotePropertyName パラメーターでこのパラメーターを使用します。 このパラメーターは省略可能です。
このパラメーターは、Windows PowerShell 3.0 で導入されました。
型: | Object |
配置: | 1 |
規定値: | None |
必須: | True |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | False |
-PassThru
作業中のアイテムを表すオブジェクトを返します。 既定では、このコマンドレットは出力を生成しません。
ほとんどのオブジェクトでは、Add-Member
入力オブジェクトに新しいメンバーを追加します。
ただし、入力オブジェクトが文字列の場合、 Add-Member
は入力オブジェクトにメンバーを追加できません。
これらのオブジェクトでは、PassThru パラメーターを使用して出力オブジェクトを作成します。
Windows PowerShell 2.0 では、Add-Member
オブジェクトではなく、オブジェクトの PSObject ラッパーにのみメンバーを追加しました。
PSObject ラッパーを持つ任意のオブジェクトの出力オブジェクトを作成するには、PassThru パラメーターを使用します。
型: | SwitchParameter |
配置: | Named |
規定値: | None |
必須: | False |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | False |
-SecondValue
AliasProperty、ScriptProperty、CodeProperty、または CodeMethod メンバーに関するオプションの追加情報を指定します。
AliasPropertyを追加するときに使用する場合、このパラメーターはデータ型である必要があります。 指定したデータ型への変換が、AliasPropertyの値に追加されます。
たとえば、文字列プロパティの代替名を提供する AliasProperty を追加する場合は、System.Int32 の SecondValue パラメーターを指定して、対応する AliasProperty を使用してアクセスするときに、その文字列プロパティの値を整数に変換する必要があることを示すこともできます。
SecondValue パラメーターを使用して、ScriptProperty メンバーを追加するときに追加の ScriptBlock を指定できます。 Value パラメーターで指定された最初の ScriptBlock は、変数の値を取得するために使用されます。 SecondValue パラメーターで指定される 2 番目の ScriptBlock は、変数の値を設定するために使用されます。
型: | Object |
配置: | 3 |
規定値: | None |
必須: | False |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | False |
-TypeName
型の名前を指定します。
型が System 名前空間のクラス、または型アクセラレータを持つ型である場合は、型の短い名前を入力できます。 それ以外の場合は、完全な型名が必要です。 このパラメーターは、InputObject が PSObjectである場合にのみ有効です。
このパラメーターは、Windows PowerShell 3.0 で導入されました。
型: | String |
配置: | Named |
規定値: | None |
必須: | False |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | False |
-Value
追加されたメンバーの初期値を指定します。 AliasProperty、CodeProperty、ScriptProperty、または CodeMethod メンバーを追加する場合は、SecondValue パラメーターを使用して省略可能な追加情報を指定できます。
型: | Object |
配置: | 2 |
規定値: | None |
必須: | False |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | False |
入力
任意の種類のオブジェクトをこのコマンドレットにパイプできます。
出力
None or System.Object
PassThru パラメーターを使用すると、このコマンドレットは新しく拡張されたオブジェクトを返します。 それ以外の場合、このコマンドレットは出力を生成しません。
メモ
PSObject オブジェクトにのみメンバーを追加できます。 オブジェクトが PSObject オブジェクト かどうかを判断するには、-is
演算子を使用します。
たとえば、$obj
変数に格納されているオブジェクトをテストするには、「$obj -is [PSObject]
」と入力します。
MemberType、Name、Value、および SecondValue パラメーター の名前は省略可能です。 パラメーター名を省略する場合、名前のないパラメーター値は、MemberType、Name、Value、および SecondValue の順序で指定する必要があります。
パラメーター名を含める場合、パラメーターは任意の順序で表示できます。
$this
自動変数は、新しいプロパティとメソッドの値を定義するスクリプト ブロックで使用できます。
$this
変数は、プロパティとメソッドが追加されるオブジェクトのインスタンスを参照します。
$this
変数の詳細については、「about_Automatic_Variables」を参照してください。