Windows PowerShell オブジェクトのインスタンスに、ユーザーが定義したカスタム メンバーを追加します。

構文

Add-Member [-MemberType] {<AliasProperty> | <CodeProperty> | <Property> | <NoteProperty> | <ScriptProperty> | <Properties> | <PropertySet> | <Method> | <CodeMethod> | <ScriptMethod> | <Methods> | <ParameterizedProperty> | <MemberSet> | <Event> | <All>} [-Name] <string> -InputObject <psobject> [[-Value] <Object>] [[-SecondValue] <Object>] [-Force] [-PassThru] [<CommonParameters>]

説明

Add-Member コマンドレットは、Windows PowerShell オブジェクトのインスタンスに、ユーザーが定義したカスタム メンバーを追加します。追加できるメンバーの型は、AliasProperty、CodeProperty、NoteProperty、ScriptProperty、PropertySet、CodeMethod、MemberSet、および ScriptMethod です。メンバーの初期値は Value パラメーターを使用して設定します。AliasProperty、ScriptProperty、CodeProperty、および CodeMethod の場合は、SecondValue パラメーターを使用して追加情報を指定できます。

追加メンバーは、パイプを使用して Add-Member に渡すオブジェクト、または InputObject パラメーターに指定するオブジェクトの特定インスタンスに追加されます。追加メンバーは、そのインスタンスが存在する間のみ使用できます。Export-Clixml コマンドレットを使用すると、追加メンバーを含む、そのインスタンスをファイルに保存できます。Import-Clixml コマンドレットを使用すると、そのファイルに保存された情報からオブジェクトのインスタンスを再作成できます。

パラメーター

-Force

同じ名前のメンバーが既に存在している場合でも、新しいメンバーを追加します。型のコア メンバーに対しては無効です。

必須

false

位置

named

既定値

パイプライン入力を許可する

false

ワイルドカード文字を許可する

false

-InputObject <psobject>

新しいメンバーの追加先となるオブジェクトを指定します。オブジェクトが格納されている変数を入力するか、オブジェクトを取得するコマンドまたは式を入力します。

必須

true

位置

named

既定値

パイプライン入力を許可する

true (ByValue)

ワイルドカード文字を許可する

false

-MemberType <PSMemberTypes>

追加するメンバーの型を指定します。このパラメーターは必須です。

このパラメーターの有効な値は次のとおりです。

-- AliasProperty: 既存のプロパティの新しい名前を定義するプロパティ。

-- CodeMethod: Microsoft .NET Framework クラスの静的メソッドを参照するメソッド。

-- CodeProperty: .NET Framework クラスの静的プロパティを参照するプロパティ。

-- MemberSet: PSBase、PSObject、PSTypeNames などのプロパティおよびメソッドの定義済みコレクション。

-- Method: 基になる .NET Framework オブジェクトのメソッド。

-- NoteProperty: 静的な値を持つプロパティ。

-- ParameterizedProperty: パラメーターとパラメーター値を取得するプロパティ。

-- Property: 基になる .NET Framework オブジェクトのプロパティ。

-- PropertySet: オブジェクト プロパティの定義済みコレクション。

-- ScriptMethod: 値がスクリプトの出力であるメソッド。

-- ScriptProperty: 値がスクリプトの出力であるプロパティ。

-- All: すべてのメンバー型を取得します。

-- Methods: オブジェクトのメソッド (method、codemethod、scriptmethod など) のすべての型を取得します。

-- Properties: オブジェクトのプロパティ (property、codeproperty、aliasproperty、scriptproperty など) のすべての型を取得します。

すべてのオブジェクトが各型のメンバーを持っているわけではありません。オブジェクトが持っていないメンバー型を指定すると、Windows PowerShell はエラーを返します。

Event メンバー型は、Add-Member には無効です。

必須

true

位置

1

既定値

パイプライン入力を許可する

false

ワイルドカード文字を許可する

true

-Name <string>

追加するメンバーの名前を指定します。

パラメーター名 "Name" を省略する場合、-Name パラメーターの値はコマンド内で 2 番目の名前付きでないパラメーター値である必要があります。このパラメーター名を指定する場合、指定する順序は任意です。

必須

true

位置

2

既定値

パイプライン入力を許可する

false

ワイルドカード文字を許可する

false

-PassThru

新たに拡張されたオブジェクトをパイプラインに渡します。既定では、このコマンドレットによる出力はありません。

必須

false

位置

named

既定値

パイプライン入力を許可する

false

ワイルドカード文字を許可する

false

-SecondValue <Object>

AliasProperty、ScriptProperty、CodeProperty、または CodeMethod メンバーに関するオプションの追加情報を指定します。AliasProperty を追加する場合、このパラメーターはデータ型である必要があります。AliasProperty の値は、指定されたデータ型へ変換 (キャスト) されます。たとえば、文字列プロパティの代替名を持つ AliasProperty を追加する場合は、System.Int32 の SecondValue パラメーターを指定しておくことによって、対応する AliasProperty を使用してアクセスされるときに、その文字列プロパティの値が整数に変換される必要があることを示すこともできます。

SecondValue パラメーターを使用すると、ScriptProperty メンバーを追加するときに新たに ScriptBlock を指定することができます。その場合、Value パラメーターで指定されている最初の ScriptBlock を使用して、変数の値を取得します。Value パラメーターで指定されている 2 番目の ScriptBlock を使用して、変数の値を設定します。

必須

false

位置

4

既定値

パイプライン入力を許可する

false

ワイルドカード文字を許可する

false

-Value <Object>

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

必須

false

位置

3

既定値

パイプライン入力を許可する

false

ワイルドカード文字を許可する

false

<CommonParameters>

このコマンドレットは、次の共通パラメーターをサポートします: -Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer、および -OutVariable。Ô”¼š¤Ë¤Ä¤¤¤Æ¤Ï¡¢次を参照してください: about_Commonparameters.

入力と出力

入力値の型は、コマンドレットへのパイプが可能なオブジェクトの型です。戻り値の型は、コマンドレットによって返されるオブジェクトの型です。

入力

System.Management.Automation.PSObject

パイプを使用してすべてのオブジェクト型を Add-Member に渡すことができます。

出力

なし、または System.Object

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

メンバーは PSObject オブジェクトにのみ追加できます。オブジェクトが PSObject オブジェクトかどうかを判定するには、is 演算子を使用します。たとえば、$obj 変数に保存されているオブジェクトを判定するには、「$obj -is [PSObject]」と入力します。

MemberType、Name、Value、および SecondValue パラメーターの名前はオプションです。パラメーター名を省略する場合は、名前のないパラメーター値を MemberType、Name、Value、SecondValue の順序で指定する必要があります。パラメーター名を指定する場合は、パラメーターの順序に決まりはありません。

例 1

C:\PS>$a = (get-childitem)[0]

C:\PS> $a | add-member -membertype noteproperty -name Status -value done

C:\PS> $a | get-member -type noteproperty

   TypeName: System.IO.DirectoryInfo

Name          MemberType   Definition
----          ----------   ----------
PSChildName   NoteProperty System.String PSChildName=Co
PSDrive       NoteProperty System.Management.Automation
PSIsContainer NoteProperty System.Boolean PSIsContainer
PSParentPath  NoteProperty System.String PSParentPath=M
PSPath        NoteProperty System.String PSPath=Microso
PSProvider    NoteProperty System.Management.Automation
Status        NoteProperty System.String Status=done

説明
-----------
これらのコマンドは、Get-ChildItem から返された DirectoryInfo オブジェクトに Status ノート プロパティを追加し、その値として "done" を設定します。

最初のコマンドは、Get-Childitem から返された最初のオブジェクト (インデックス 0) を取得します。

2 番目のコマンドは、ノート プロパティを追加します。

3 番目のコマンドは、パイプライン演算子 (|) を使用して、更新されたオブジェクトを Get-Member コマンドレットに送ります。出力結果を見ると、プロパティが追加されていることがわかります。






例 2

C:\PS>$a = (get-childitem)[0]

C:\PS> $a | add-member -membertype aliasproperty -name FileLength -value Length 

C:\PS> $a.filelength

説明
-----------
これらのコマンドは、Get-ChildItem から返された DirectoryInfo オブジェクトに FileLength エイリアス プロパティを追加します。この新しいプロパティが、Length プロパティのエイリアスです。

最初のコマンドは、Get-Childitem から返された最初のオブジェクト (インデックス 0) を取得します。

2 番目のコマンドは、エイリアス プロパティを追加します。

3 番目のコマンドは、新しい FileLength プロパティの値を返します。






例 3

C:\PS>$a = "a string"

C:\PS> $a = $a | add-member -membertype noteproperty -name StringUse -value Display -passthru

C:\PS> $a.StringUse

説明
-----------
これらのコマンドは、文字列に StringUse プロパティを追加します。この文字列は PSObject オブジェクトではないため、コマンドに PassThru パラメーターを含めることで、拡張された文字列を変数内に保存する必要があります。この例では、最後のコマンドによって新しいプロパティが表示されます。






例 4

C:\PS>$a = "this is a string"

C:\PS> $a = add-member -inputobject $a -membertype scriptmethod -name words `
-value {$this.split()} -passthru

C:\PS> $a.words()

説明
-----------
これらのコマンドは、文字列オブジェクトにスクリプト メソッドを追加します。このスクリプト メソッドは、System.String .NET Framework Class Library クラスの Split() メソッドを公開します。これにより、その文字列オブジェクト上で "Words" という名前のメソッドを呼び出して、簡単に文字列内の各単語を返すことができます。PassThru パラメーターが指定されていることにより、拡張された文字列オブジェクトが Add-Member により強制的に出力として返され、$a 変数に保存されることに注意してください。






例 5

C:\PS>$event = get-eventlog -logname system -newest 1

C:\PS> $event.TimeWritten | get-member

C:\PS> add-member -inputobject $event -membertype aliasproperty -name When `
-value TimeWritten -secondvalue System.String

C:\PS> $event.When | get-member

説明
-----------
これらのコマンドは、Get-EventLog コマンドレットが返す EventLogEntry オブジェクトに AliasProperty を追加します。AliasProperty には "When" という名前が付けられ、オブジェクトの TimeWritten プロパティのエイリアスとなります。SecondValue パラメーターは、AliasProperty でアクセスされるときにプロパティ値を System.String 型に変換する必要があることを示すのに使用されています。TimeWritten プロパティは DateTime オブジェクトです。

最初のコマンドは、Get-EventLog コマンドレットを使用して System イベント ログから最新のイベントを取得し、$event 変数に保存しています。

2 番目のコマンドは、そのイベントの TimeWritten プロパティにアクセスし、パイプを使用してそれを Get-Member コマンドレットに渡すことで、プロパティが DateTime 型であることを示します。次に Add-Member を使用して、$event 変数に格納されている EventLogEntry オブジェクト インスタンスに AliasProperty メンバーを追加します。Name パラメーターは、新しいメンバーの名前を "When" に設定するために使用され、Value パラメーターは、When が TimeWritten プロパティのエイリアスであることを指定するために使用されています。SecondValue パラメーターは、この新しいメンバーが返す値を元の System.DateTime 型から System.String 型に変換する必要があることを示すのに使用されています。

3 番目のコマンドは、新しいメンバーにアクセスし、パイプを使用してそれを Get-Member コマンドレットに渡しています。これにより、新しいメンバーが System.String 型であることが確認されます。






例 6

C:\PS>function Copy-Property ($From, $To)

{
  foreach ($p in Get-Member -InputObject $From -MemberType Property)
  {
     Add-Member -InputObject $To -MemberType NoteProperty -Name $p.Name 
     -Value $From.$($p.Name) -Force

     $To.$($p.Name) = $From.$($p.Name)
   }
}

説明
-----------
この関数は、1 つのオブジェクトのすべてのプロパティを別のオブジェクトにコピーします。

関数の最初のコマンドは、関数名を宣言し、パラメーターをリストします。

For-Each ループは、Get-Member コマンドレットを使用して From オブジェクトの各プロパティを取得します。Foreach ループ内のコマンドは、各プロパティで順次実行されます。

Add-Member コマンドは、From オブジェクトのプロパティを NoteProperty として To オブジェクトに追加します。また、Force パラメーターを使用することで、コマンドで同じメンバー名のメンバーを追加しています。

関数の最後のコマンドは、新しいプロパティに元のプロパティと同じ名前を付けます。






関連項目




目次