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
。 出力が示すように、値は です 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 で、値はノート プロパティの値 である 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: カスタム オブジェクトをCreateする
この例では、 Asset カスタム オブジェクトを作成します。
コマンドレットは New-Object
、変数に保存される PSObject を $Asset
作成します。 型アクセラレータは [ordered]
、変数に格納されている順序付きディクショナリを $d
作成します。
パイプを $Asset
使用すると Add-Member
、ディクショナリ内のキーと値のペアが NoteProperty メンバーとしてオブジェクトに追加されます。 TypeName パラメーターは、PSObject に型Asset
を割り当てます。 コマンドレットは Get-Member
、 オブジェクトの型とプロパティを示します。 ただし、プロパティは、追加された順序ではなく、アルファベット順に一覧表示されます。
$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 -MemberType Properties
TypeName: Asset
Name MemberType Definition
---- ---------- ----------
Name NoteProperty string Name=Server30
PSVersion NoteProperty string PSVersion=4.0
System NoteProperty string System=Server Core
$Asset.PSObject.Properties | Format-Table Name, MemberType, TypeNameOfValue, Value
Name MemberType TypeNameOfValue Value
---- ---------- --------------- -----
Name NoteProperty System.String Server30
System NoteProperty System.String Server Core
PSVersion NoteProperty System.String 4.0
プロパティの生のリストを検査すると、プロパティがオブジェクトに追加された順序で表示されます。 Format-Table
は、 のような出力を作成するために、この例で使用されます Get-Member
。
例 6: AliasProperty をオブジェクトに追加する
この例では、2 つの NoteProperty メンバーを含むカスタム オブジェクトを作成します。 NoteProperty の型は、 プロパティに格納されている値の型を反映します。 この場合、 Age プロパティは文字列です。
PS> $obj = [pscustomobject]@{
Name = 'Doris'
Age = '20'
}
PS> $obj | Add-Member -MemberType AliasProperty -Name 'intAge' -Value age -SecondValue uint32
PS> $obj | Get-Member
TypeName: System.Management.Automation.PSCustomObject
Name MemberType Definition
---- ---------- ----------
intAge AliasProperty intAge = (System.UInt32)age
Equals Method bool Equals(System.Object obj)
GetHashCode Method int GetHashCode()
GetType Method type GetType()
ToString Method string ToString()
Age NoteProperty string Age=20
Name NoteProperty string Name=Doris
PS> $obj
Name Age intAge
---- --- ------
Doris 20 20
PS> $obj.Age + 1
201
PS> $obj.intAge + 1
21
intAge プロパティは Age プロパティの AliasProperty ですが、型は uint32 であることが保証されます。
例 7: get メソッドと set メソッドをカスタム オブジェクトに追加する
この例では、深く入れ子になったプロパティにアクセスする Get メソッドと Set メソッドを定義する方法を示します。
$user = [pscustomobject]@{
Name = 'User1'
Age = 29
StartDate = [datetime]'2019-05-05'
Position = [pscustomobject]@{
DepartmentName = 'IT'
Role = 'Manager'
}
}
$addMemberSplat = @{
MemberType = 'ScriptProperty'
Name = 'Title'
Value = { $this.Position.Role } # getter
SecondValue = { $this.Position.Role = $args[0] } # setter
}
$user | Add-Member @addMemberSplat
$user | Get-Member
TypeName: System.Management.Automation.PSCustomObject
Name MemberType Definition
---- ---------- ----------
Equals Method bool Equals(System.Object obj)
GetHashCode Method int GetHashCode()
GetType Method type GetType()
ToString Method string ToString()
Age NoteProperty int Age=29
Name NoteProperty string Name=User1
Position NoteProperty System.Management.Automation.PSCustomObject Position=@{DepartmentName=IT; Role=Manager}
StartDate NoteProperty datetime StartDate=5/5/2019 12:00:00 AM
Title ScriptProperty System.Object Title {get= $this.Position.Role ;set= $this.Position.Role = $args[0] ;}
$user.Title = 'Dev Manager'
Name : User1
Age : 29
StartDate : 5/5/2019 12:00:00 AM
Position : @{DepartmentName=IT; Role=Dev Manager}
Title : Dev Manager
Title プロパティは、Get メソッドと Set メソッドを持つ ScriptProperty であることに注意してください。 Title プロパティに新しい値を割り当てると、Set メソッドが呼び出され、Position プロパティの Role プロパティの値が変更されます。
パラメーター
-Force
既定では、 Add-Member
オブジェクトに同じメンバーが既に存在する場合は、新しいメンバーを追加できません。
Force パラメーターを使用すると、Add-Member
既存のメンバーが新しいメンバーに置き換えられます。
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
追加するメンバーの型を指定します。 このパラメーターは必須です。 このパラメーターの有効値は、次のとおりです。
- AliasProperty
- CodeMethod
- CodeProperty
- NoteProperty
- ScriptMethod
- ScriptProperty
これらの値の詳細については、PowerShell SDK の PSMemberTypes 列挙 に関するページを参照してください。
すべてのオブジェクトにすべての型のメンバーがあるわけではありません。 オブジェクトに含まれていないメンバー型を指定すると、PowerShell はエラーを返します。
Type: | PSMemberTypes |
Aliases: | Type |
Accepted values: | AliasProperty, CodeMethod, CodeProperty, NoteProperty, ScriptMethod, ScriptProperty |
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
NoteProperty 名とその値を表すキーと値のペアを含むハッシュテーブルまたは順序付きディクショナリを指定します。 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
ノート プロパティの値を指定します。
このパラメーターは 、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 メンバーに関するオプションの追加情報を指定します。
AliasProperty を追加するときに使用する場合、このパラメーターはデータ型である必要があります。 指定したデータ型への変換が AliasProperty の値に追加されます。 たとえば、文字列プロパティの代替名を提供する AliasProperty を追加する場合、System.Int32 の SecondValue パラメーターを指定して、対応する AliasProperty を使用してアクセスするときに、その文字列プロパティの値を整数に変換する必要があることを示すこともできます。
CodeProperty の場合、値は Set アクセサーを実装するメソッドへの参照である必要があります。 メソッドへの参照を GetMethod()
取得するには、型参照の メソッドを使用します。 メソッドは 、PSObject である単一のパラメーターを受け取る必要があります。 Get アクセサーは、Value パラメーターを使用して割り当てられます。
ScriptProperty の場合、値は Set アクセサーを実装するスクリプト ブロックである必要があります。 Get アクセサーは、Value パラメーターを使用して割り当てられます。
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 メンバーを追加する場合は、SecondValue パラメーターを使用して追加情報を指定できます。
- AliasProperty の場合、値はエイリアス化されるプロパティの名前である必要があります。
- CodeMethod の場合、値はメソッドへの参照である必要があります。 メソッドへの参照を
GetMethod()
取得するには、型参照の メソッドを使用します。 - CodeProperty の場合、値は Get アクセサーを実装するメソッドへの参照である必要があります。 メソッドへの参照を
GetMethod()
取得するには、型参照の メソッドを使用します。 参照。 メソッドは 、PSObject である単一のパラメーターを受け取る必要があります。 Set アクセサーは SecondValue パラメーターを使用して割り当てられます。 - ScriptMethod の場合、値はスクリプト ブロックである必要があります。
- ScriptProperty の場合、値は Get アクセサーを実装するスクリプト ブロックである必要があります。 Set アクセサーは SecondValue パラメーターを使用して割り当てられます。
Type: | Object |
Position: | 2 |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
入力
任意のオブジェクトをこのコマンドレットにパイプできます。
出力
None
既定では、このコマンドレットは出力を返しません。
PassThru パラメーターを使用すると、このコマンドレットは新しく拡張されたオブジェクトを返します。
メモ
メンバーは、PSObject 型オブジェクトにのみ追加できます。 オブジェクトが PSObject オブジェクトであるかどうかを判断するには、 演算子を -is
使用します。 たとえば、 変数に格納されている $obj
オブジェクトをテストするには、「 」と入力します $obj -is [psobject]
。
PSObject 型オブジェクトは、メンバーがオブジェクトに追加された順序でメンバーのリストを保持します。
MemberType、Name、Value、SecondValue の各パラメーターの名前は省略可能です。 パラメーター名を省略した場合、名前のないパラメーター値は 、MemberType、 Name、 Value、 SecondValue の順に指定する必要があります。
パラメーター名を指定する場合は、パラメーターの順序に決まりはありません。
スクリプト ブロックでは、 $this
新しいプロパティとメソッドの値を定義する自動変数を使用できます。 変数は $this
、プロパティとメソッドが追加されるオブジェクトのインスタンスを参照します。 変数の $this
詳細については、「 about_Automatic_Variables」を参照してください。