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-MemberInputObject パラメーターを使用してオブジェクトを指定します。

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 番目のコマンドでは、ドット表記を使用して、オブジェクト$aStatus プロパティの値を取得します。 出力が示すように、値は "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-MemberString 入力オブジェクトに型を追加できないため、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-MemberFrom オブジェクトのプロパティを 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-ObjectPSObject を作成します。 この例では、 PSObject を 変数に $Asset 保存します。

2 番目のコマンドでは、型アクセラレータを [ordered] 使用して、名前と値の順序付きディクショナリを作成します。 このコマンドは、結果を変数に $D 保存します。

3 番目のコマンドでは、コマンドレットの NotePropertyMembers パラメーターを Add-Member 使用して、変数内のディクショナリを $DPSObject に追加します。 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

AliasPropertyScriptPropertyCodeProperty、または CodeMethod の各メンバーに関する省略可能な追加情報を指定します。

AliasProperty を追加するときに使用する場合、このパラメーターはデータ型である必要があります。 指定したデータ型への変換が AliasProperty の値に追加されます。

たとえば、文字列プロパティの代替名を提供する AliasProperty を追加する場合は、System.Int32SecondValue パラメーターを指定して、対応する 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 名前空間のクラスまたは型アクセラレータを持つ型である場合は、型の短い名前を入力できます。 それ以外の場合は、完全な型名が必要です。 このパラメーターは、 InputObjectPSObject の場合にのみ有効です。

このパラメーターは Windows PowerShell 3.0 で導入されました。

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Value

追加されたメンバーの初期値を指定します。 AliasProperty、CodePropertyScriptProperty、または CodeMethod メンバーを追加する場合は、SecondValue パラメーターを使用してオプションの追加情報を指定できます。

Type:Object
Position:2
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

入力

PSObject

任意のオブジェクトの種類をこのコマンドレットにパイプできます。

出力

None or System.Object

PassThru パラメーターを使用すると、このコマンドレットは新しく拡張されたオブジェクトを返します。 それ以外の場合、このコマンドレットによる出力はありません。

メモ

メンバーは PSObject オブジェクトにのみ追加できます。 オブジェクトが PSObject オブジェクトであるかどうかを判断するには、演算子を -is 使用します。

たとえば、変数に格納されている $obj オブジェクトをテストするには、「.」と入力します $obj -is [PSObject]

MemberTypeNameValueSecondValue の各パラメーターの名前は省略可能です。 パラメーター名を省略した場合、名前のないパラメーター値は 、MemberTypeNameValueSecondValue の順に表示する必要があります。

パラメーター名を指定する場合は、パラメーターの順序に決まりはありません。

スクリプト ブロックでは、 $this 新しいプロパティとメソッドの値を定義する自動変数を使用できます。 変数は $this 、プロパティとメソッドが追加されるオブジェクトのインスタンスを参照します。 変数の詳細については $this 、「 about_Automatic_Variables」を参照してください。