PowerShell Cmdlet - Add-Member
 記事記号:[mf1906] 初版:2011/Sep/30

この文書は、Windows PowerShellのヘルプ機能で表示される内容を再構成したものです。

名前
    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
ご利用数: 1857587
感想・要望・問い合わせは こちら