
記事記号:[mf1906] 初版:2011/Sep/30

名前
Add-Member
概要
Windows PowerShell オブジェクトのインスタンスに、ユーザーが定義したカスタム
メンバーを追加します。
構文
Add-Member [-MemberType] {AliasProperty | CodeProperty | Property | NoteProp
erty | ScriptProperty | Properties | PropertySet | Method | CodeMethod | Scr
iptMethod | Methods | ParameterizedProperty | MemberSet | Event | All} [-Nam
e] <string> -InputObject <psobject> [[-Value] <Object>] [[-SecondValue] <Obj
ect>] [-Force] [-PassThru] [<CommonParameters>]
説明
Add-Member コマンドレットは、Windows PowerShell オブジェクトのインスタンスに、
ユーザーが定義したカスタム メンバーを追加します。追加できるメンバーの型は、A
liasProperty、CodeProperty、NoteProperty、ScriptProperty、PropertySet、CodeM
ethod、MemberSet、および ScriptMethod です。メンバーの初期値は Value パラメ
ーターを使用して設定します。AliasProperty、ScriptProperty、CodeProperty、お
よび CodeMethod の場合は、SecondValue パラメーターを使用して追加情報を指定で
きます。
追加メンバーは、パイプを使用して Add-Member に渡すオブジェクト、または Input
Object パラメーターに指定するオブジェクトの特定インスタンスに追加されます。
追加メンバーは、そのインスタンスが存在する間のみ使用できます。Export-Clixml
コマンドレットを使用すると、追加メンバーを含む、そのインスタンスをファイルに
保存できます。Import-Clixml コマンドレットを使用すると、そのファイルに保存さ
れた情報からオブジェクトのインスタンスを再作成できます。
パラメーター
-Force [<SwitchParameter>]
同じ名前のメンバーが既に存在している場合でも、新しいメンバーを追加します。
型のコア メンバーに対しては無効です。
必須 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、aliaspr
operty、scriptproperty など) のすべての型を取得します。
すべてのオブジェクトが各型のメンバーを持っているわけではありません。オブ
ジェクトが持っていないメンバー型を指定すると、Windows PowerShell はエラ
ーを返します。
Event メンバー型は、Add-Member には無効です。
必須 true
位置 1
既定値
パイプライン入力を許可する false
ワイルドカード文字を許可する true
-Name <string>
追加するメンバーの名前を指定します。
パラメーター名 "Name" を省略する場合、-Name パラメーターの値はコマンド内
で 2 番目の名前付きでないパラメーター値である必要があります。このパラメ
ーター名を指定する場合、指定する順序は任意です。
必須 true
位置 2
既定値
パイプライン入力を許可する false
ワイルドカード文字を許可する false
-PassThru [<SwitchParameter>]
新たに拡張されたオブジェクトをパイプラインに渡します。既定では、このコマ
ンドレットによる出力はありません。
必須 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、WarningAction、WarningVariable、
OutBuffer、および OutVariable。詳細については、
「get-help about_commonparameters」と入力してヘルプを参照してください。
入力
System.Management.Automation.PSObject
パイプを使用してすべてのオブジェクト型を Add-Member に渡すことができます。
出力
なし、または System.Object
PassThru パラメーターを使用すると、Add-Member は新たに拡張されたオブジェ
クトを返します。それ以外の場合、このコマンドレットによる出力はありません。
メモ
メンバーは PSObject オブジェクトにのみ追加できます。オブジェクトが PSObj
ect オブジェクトかどうかを判定するには、is 演算子を使用します。たとえば、
$obj 変数に保存されているオブジェクトを判定するには、「$obj -is [PSObjec
t]」と入力します。
MemberType、Name、Value、および SecondValue パラメーターの名前はオプショ
ンです。パラメーター名を省略する場合は、名前のないパラメーター値を Membe
rType、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 Len
gth
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 プロパティのエイリアスとなります。SecondV
alue パラメーターは、AliasProperty でアクセスされるときにプロパティ値を Syst
em.String 型に変換する必要があることを示すのに使用されています。TimeWritten
プロパティは DateTime オブジェクトです。
最初のコマンドは、Get-EventLog コマンドレットを使用して System イベント ログ
から最新のイベントを取得し、$event 変数に保存しています。
2 番目のコマンドは、そのイベントの TimeWritten プロパティにアクセスし、パイ
プを使用してそれを Get-Member コマンドレットに渡すことで、プロパティが DateT
ime 型であることを示します。次に Add-Member を使用して、$event 変数に格納さ
れている EventLogEntry オブジェクト インスタンスに AliasProperty メンバーを
追加します。Name パラメーターは、新しいメンバーの名前を "When" に設定するた
めに使用され、Value パラメーターは、When が TimeWritten プロパティのエイリア
スであることを指定するために使用されています。SecondValue パラメーターは、こ
の新しいメンバーが返す値を元の System.DateTime 型から System.String 型に変換
する必要があることを示すのに使用されています。
3 番目のコマンドは、新しいメンバーにアクセスし、パイプを使用してそれを Get-M
ember コマンドレットに渡しています。これにより、新しいメンバーが System.Stri
ng 型であることが確認されます。
-------------------------- 例 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 として T
o オブジェクトに追加します。また、Force パラメーターを使用することで、コマン
ドで同じメンバー名のメンバーを追加しています。
関数の最後のコマンドは、新しいプロパティに元のプロパティと同じ名前を付けます。
関連するリンク
Online version: http://go.microsoft.com/fwlink/?LinkID=113280
Get-Member
Export-Clixml
Import-Clixml

基本ソフト: Windows 7
キーワード: Windows PowerShell、ヘルプ、Cmdlet、Add-Member