Add-Member
PowerShell オブジェクトのインスタンスにカスタム プロパティとメソッドを追加します。
構文
Add-Member
-InputObject <PSObject>
-TypeName <String>
[-PassThru]
[<CommonParameters>]
Add-Member
-InputObject <PSObject>
[-TypeName <String>]
[-Force]
[-PassThru]
[-NotePropertyMembers] <IDictionary>
[<CommonParameters>]
Add-Member
-InputObject <PSObject>
[-TypeName <String>]
[-Force]
[-PassThru]
[-NotePropertyName] <String>
[-NotePropertyValue] <Object>
[<CommonParameters>]
Add-Member
-InputObject <PSObject>
[-MemberType] <PSMemberTypes>
[-Name] <String>
[[-Value] <Object>]
[[-SecondValue] <Object>]
[-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" の Status note プロパティをTest.txt
追加します。
最初のコマンドでは、 コマンドレットを Get-ChildItem
使用して、ファイルを表す FileInfo オブジェクトを Test.txt
取得します。 変数に $a
保存します。
2 番目のコマンドは、 の オブジェクト $a
に note プロパティを追加します。
3 番目のコマンドでは、ドット表記を使用して、 オブジェクトの Status プロパティの値を取得します $a
。 出力に示されているように、値は "完了" です。
$A = Get-ChildItem c:\ps-test\test.txt
$A | Add-Member -NotePropertyName Status -NotePropertyValue Done
$A.Status
Done
例 2: PSObject にエイリアス プロパティを追加する
次の例では、ファイルを表す オブジェクトに Size エイリアス プロパティを Test.txt
追加します。 新しいプロパティは Length プロパティのエイリアスです。
最初のコマンドでは、 コマンドレットをGet-ChildItem
使用して FileInfo オブジェクトをTest.txt
取得します。
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 で、値はノート プロパティの値 である Display です。
$A = "A string"
$A = $A | Add-Member -NotePropertyMembers @{StringUse="Display"} -PassThru
$A.StringUse
Display
例 4: FileInfo オブジェクトにスクリプト メソッドを追加する
次の使用例は、 SizeInMB スクリプト メソッドを FileInfo オブジェクトに追加し、最も近い MegaByte にファイル サイズを計算します。 2 番目のコマンドは、型の Round 静的メソッドを使用して、ファイル サイズを[math]
小数点以下 2 番目の桁数に丸める ScriptBlock を作成します。
Value パラメーターは、現在のオブジェクトを$This
表す自動変数も使用します。 変数は $This
、新しいプロパティとメソッドを定義するスクリプト ブロックでのみ有効です。
最後のコマンドでは、ドット表記を使用して、 変数内の オブジェクトに対して新しい SizeInMB スクリプト メソッドを $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: オブジェクトのすべてのプロパティを別のオブジェクトにコピーする
この関数は、1 つのオブジェクトのすべてのプロパティを別のオブジェクトにコピーします。
ループでは 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: カスタム オブジェクトをCreateする
この例では、 Asset カスタム オブジェクトを作成します。
コマンドレットは New-Object
PSObject を作成します。 この例では、 PSObject を 変数に $Asset
保存します。
2 番目のコマンドでは、型アクセラレータを [ordered]
使用して、名前と値の順序付けられたディクショナリを作成します。 コマンドは、結果を変数に $D
保存します。
3 番目のコマンドでは、コマンドレットの NotePropertyMembers パラメーターを Add-Member
使用して、変数内のディクショナリを $D
PSObject に追加します。
TypeName プロパティは、新しい名前 Asset を PSObject に割り当てます。
最後のコマンドは、新しい 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 パラメーターを使用して、型の標準メンバーを置き換えることはできません。
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-InputObject
新しいメンバーを追加するオブジェクトを指定します。 オブジェクトが格納されている変数を入力するか、オブジェクトを取得するコマンドまたは式を入力します。
Type: | PSObject |
Position: | Named |
Default value: | None |
Required: | True |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-MemberType
追加するメンバーの型を指定します。 このパラメーターは必須です。 このパラメーターの有効値は、次のとおりです。
- NoteProperty
- AliasProperty
- ScriptProperty
- CodeProperty
- ScriptMethod
- CodeMethod
これらの値の詳細については、PowerShell SDK の PSMemberTypes 列挙 に関するページを参照してください。
すべてのオブジェクトにすべての型のメンバーがあるわけではありません。 オブジェクトに含まれていないメンバー型を指定すると、PowerShell はエラーを返します。
Type: | PSMemberTypes |
Aliases: | Type |
Accepted values: | AliasProperty, CodeProperty, Property, NoteProperty, ScriptProperty, Properties, PropertySet, Method, CodeMethod, ScriptMethod, Methods, ParameterizedProperty, MemberSet, Event, Dynamic, All |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Name
このコマンドレットが追加するメンバーの名前を指定します。
Type: | String |
Position: | 1 |
Default value: | None |
Required: | True |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-NotePropertyMembers
ノート プロパティの名前と値のハッシュ テーブルまたは順序付けされた辞書を指定します。 ノート プロパティの名前をキーとして持ち、ノート プロパティの値を値として持つハッシュ テーブルまたは辞書を指定します。
PowerShell でのハッシュ テーブルと順序付きディクショナリの詳細については、「 about_Hash_Tables」を参照してください。
このパラメーターは Windows PowerShell 3.0 で導入されました。
Type: | IDictionary |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-NotePropertyName
ノート プロパティ名を指定します。
このパラメーターは、NotePropertyValue パラメーターと一緒に使用します。 このパラメーターは省略可能です。
このパラメーターは Windows PowerShell 3.0 で導入されました。
Type: | String |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-NotePropertyValue
Note プロパティの値を指定します。
このパラメーターは 、NotePropertyName パラメーターと共に使用します。 このパラメーターは省略可能です。
このパラメーターは Windows PowerShell 3.0 で導入されました。
Type: | Object |
Position: | 1 |
Default value: | None |
Required: | True |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-PassThru
作業中の項目を表すオブジェクトを返します。 既定では、このコマンドレットによる出力はありません。
ほとんどのオブジェクトでは、 Add-Member
新しいメンバーを入力オブジェクトに追加します。
ただし、入力オブジェクトが文字列の場合、 Add-Member
メンバーを入力オブジェクトに追加することはできません。
これらのオブジェクトに対しては、PassThru パラメーターを使用して、出力オブジェクトを作成します。
Windows PowerShell 2.0 では、 Add-Member
オブジェクトではなく、 オブジェクトの PSObject ラッパーにのみメンバーを追加しました。
PassThru パラメーターを使用して、PSObject ラッパーを持つ任意のオブジェクトの出力オブジェクトを作成します。
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-SecondValue
AliasProperty、ScriptProperty、CodeProperty、または CodeMethod の各メンバーに関する省略可能な追加情報を指定します。
AliasProperty を追加するときに使用する場合、このパラメーターはデータ型である必要があります。 指定したデータ型への変換が AliasProperty の値に追加されます。
たとえば、文字列プロパティの代替名を提供する AliasProperty を追加する場合、System.Int32 の SecondValue パラメーターを指定して、対応する AliasProperty を使用してアクセスするときに、その文字列プロパティの値を整数に変換する必要があることを示すこともできます。
SecondValue パラメーターを使用すると、ScriptProperty メンバーを追加するときに追加の ScriptBlock を指定できます。 Value パラメーターで指定された最初の ScriptBlock を使用して、変数の値を取得します。 SecondValue パラメーターで指定された 2 番目の ScriptBlock は、変数の値を設定するために使用されます。
Type: | Object |
Position: | 3 |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-TypeName
型の名前を指定します。
型が System 名前空間のクラス、または型アクセラレータを持つ型である場合は、型の短い名前を入力できます。 それ以外の場合は、完全な型名が必要です。 このパラメーターは、 InputObject が PSObject の場合にのみ有効です。
このパラメーターは Windows PowerShell 3.0 で導入されました。
Type: | String |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Value
追加されたメンバーの初期値を指定します。 AliasProperty、CodeProperty、ScriptProperty、または CodeMethod メンバーを追加する場合は、SecondValue パラメーターを使用してオプションの追加情報を指定できます。
Type: | Object |
Position: | 2 |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | 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」を参照してください。