Share via


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-MemberString 入力オブジェクトに型を追加できないため、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-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: カスタム オブジェクトをCreateする

この例では、 Asset カスタム オブジェクトを作成します。

コマンドレットは New-ObjectPSObject を作成します。 この例では、 PSObject を 変数に $Asset 保存します。

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

3 番目のコマンドでは、コマンドレットの NotePropertyMembers パラメーターを Add-Member 使用して、変数内のディクショナリを $DPSObject に追加します。 TypeName プロパティは、新しい名前 AssetPSObject に割り当てます。

最後のコマンドは、新しい 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

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」を参照してください。