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 に note プロパティを追加する
次の使用例は、 ファイル を表す FileInfo オブジェクトに "Done" の値を持つ Status note プロパティを Test.txt
追加します。
最初のコマンドでは、コマンドレットを Get-ChildItem
使用して、ファイルを表す FileInfo オブジェクトを Test.txt
取得します。 変数に $a
保存します。
2 番目のコマンドは、オブジェクトに note プロパティを $a
追加します。
3 番目のコマンドでは、ドット表記を使用して、オブジェクト$a
の Status プロパティの値を取得します。 出力が示すように、値は "Done" です。
$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 で、値はノート プロパティの値 である [表示] です。
$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: カスタム オブジェクトを作成する
この例では、 Asset カスタム オブジェクトを作成します。
このコマンドレットは New-Object
PSObject を作成します。 この例では、 PSObject を 変数に $Asset
保存します。
2 番目のコマンドでは、型アクセラレータを [ordered]
使用して、名前と値の順序付きディクショナリを作成します。 このコマンドは、結果を変数に $D
保存します。
3 番目のコマンドでは、コマンドレットの NotePropertyMembers パラメーターを 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 パラメーターを使用して、型の標準メンバーを置き換えることはできません。
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
note プロパティ名を指定します。
このパラメーターは、NotePropertyValue パラメーターと一緒に使用します。 このパラメーターは省略できます。
このパラメーターは Windows PowerShell 3.0 で導入されました。
Type: | String |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-NotePropertyValue
メモ プロパティの値を指定します。
このパラメーターは 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」を参照してください。