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

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

名前
    Add-Type
    
概要
    Microsoft .NET Framework 型 (クラス) を Windows PowerShell セッションに追加 
    します。
    
構文
    Add-Type -AssemblyName <string[]> [-IgnoreWarnings] [-PassThru] [<CommonPara
    meters>]
    
    Add-Type [-Name] <string> [-MemberDefinition] <string[]> [-CodeDomProvider <C
    odeDomProvider>] [-CompilerParameters <CompilerParameters>] [-Language {CShar
    p | CSharpVersion3 | VisualBasic | JScript}] [-Namespace <string>] [-OutputAs
    sembly <string>] [-OutputType <OutputAssemblyType>] [-ReferencedAssemblies <s
    tring[]>] [-UsingNamespace <string[]>] [-IgnoreWarnings] [-PassThru] [<Common
    Parameters>]
    
    Add-Type [-Path] <string[]> [-CompilerParameters <CompilerParameters>] [-Outp
    utAssembly <string>] [-OutputType <OutputAssemblyType>] [-ReferencedAssemblie
    s <string[]>] [-IgnoreWarnings] [-PassThru] [<CommonParameters>]
    
    Add-Type [-TypeDefinition] <string> [-CodeDomProvider <CodeDomProvider>] [-Co
    mpilerParameters <CompilerParameters>] [-Language {CSharp | CSharpVersion3 | 
    VisualBasic | JScript}] [-OutputAssembly <string>] [-OutputType <OutputAssemb
    lyType>] [-ReferencedAssemblies <string[]>] [-IgnoreWarnings] [-PassThru] [<C
    ommonParameters>]
    
説明
    Add-Type コマンドレットを使用すると、Windows PowerShell セッションで .NET Fr
    amework クラスを定義できます。その後で、(New-Object コマンドレットを使用して) 
    オブジェクトをインスタンス化して、.NET Framework オブジェクトを使用する場合
    と同様にオブジェクトを使用できます。Windows PowerShell プロファイルに Add-Ty
    pe コマンドを追加すると、すべての Windows PowerShell セッションでクラスを使用
    できるようになります。
    
    既存のアセンブリ ファイルまたはソース コード ファイルを指定することによって型
    を指定するか、インラインでソース コードを指定するか、または変数に保存されてい
    るソース コードを指定することができます。メソッドのみを指定することもできます。
    この場合は Add-Type によってクラスが定義および生成されます。この機能を使用し
    て、Windows PowerShell でアンマネージ関数に対するプラットフォーム Invoke (P/I
    nvoke) 呼び出しを行うことができます。ソース コードを使用すると、Add-Type が指
    定されたソース コードをコンパイルして、新しい .NET Framework 型を含むインメモ
    リ アセンブリを生成します。
    
    Add-Type のパラメーターを使用して、別の言語およびコンパイラ (既定は CSharp)、
    コンパイラ オプション、アセンブリの依存関係、クラスの名前空間、型の名前、およ
    び結果のアセンブリを指定することができます。
    
パラメーター
    -AssemblyName <string[]>
        型を含むアセンブリの名前を指定します。Add-Type は、指定されたアセンブリ
        から型を取得します。アセンブリ名に基づいて型を作成する場合は、このパラメ
        ーターが必須になります。
        
        アセンブリのフル ネームまたは簡易名 ("部分名" とも呼ばれます) を入力しま
        す。アセンブリ名にはワイルドカード文字を使用できます。簡易名または部分名
        を入力すると、Add-Type がそれをフル ネームに解決し、フル ネームを使用して
        アセンブリを読み込みます。
        
        このパラメーターは、パスまたはファイル名を受け入れません。アセンブリのダ
        イナミック リンク ライブラリ (DLL) ファイルへのパスを入力するには、Path 
        パラメーターを使用します。
        
        必須                         true
        位置                         named
        既定値                       
        パイプライン入力を許可する   false
        ワイルドカード文字を許可する true
        
    -CodeDomProvider <CodeDomProvider>
        コード ジェネレーターまたはコード コンパイラを指定します。Add-Type は、
        指定されたコンパイラを使用してソース コードをコンパイルします。既定値は 
        CSharp コンパイラです。Language パラメーターで指定できない言語を使用して
        いる場合は、このパラメーターを使用してください。指定する CodeDomProvider 
        は、ソース コードからアセンブリを生成できる必要があります。
        
        必須                         false
        位置                         named
        既定値                       CSharp コンパイラ
        パイプライン入力を許可する   false
        ワイルドカード文字を許可する false
        
    -CompilerParameters <CompilerParameters>
        ソース コード コンパイラのオプションを指定します。これらのオプションは、
        改訂なしでコンパイラに送られます。
        
        このパラメーターを使用すると、実行可能ファイルの生成、リソースの埋め込み、
        "/unsafe" オプションなどのコマンド ライン オプションの設定をコンパイラに
        指示できます。このパラメーターは、CompilerParameters クラス (System.Code
        Dom.Compiler.CompilerParameters) を実装します。
        
        必須                         false
        位置                         named
        既定値                       
        パイプライン入力を許可する   false
        ワイルドカード文字を許可する false
        
    -IgnoreWarnings [<SwitchParameter>]
        コンパイラ警告を無視します。このパートナーを使用して、Add-Type でコンパ
        イラ警告がエラーとして処理されないようにします。
        
        必須                         false
        位置                         named
        既定値                       False
        パイプライン入力を許可する   false
        ワイルドカード文字を許可する false
        
    -Language <Language>
        ソース コードで使用されている言語を指定します。Add-Type は、この言語に対
        応するコード コンパイラを選択します。
        
        有効な値は "CSharp"、"CSharpVersion3"、"VisualBasic"、および "JScript" 
        です。既定値は "CSharp" です。
        
        必須                         false
        位置                         named
        既定値                       CSharp
        パイプライン入力を許可する   false
        ワイルドカード文字を許可する false
        
    -MemberDefinition <string[]>
        クラスの新しいプロパティまたはメソッドを指定します。Add-Type により、そ
        のプロパティまたはメソッドをサポートするために必要なテンプレート コード
        を生成します。
        
        この機能を使用して、Windows PowerShell でアンマネージ関数に対するプラッ
        トフォーム Invoke (P/Invoke) 呼び出しを行うことができます。詳細について
        は、例を参照してください。
        
        必須                         true
        位置                         2
        既定値                       
        パイプライン入力を許可する   false
        ワイルドカード文字を許可する false
        
    -Name <string>
        作成するクラスの名前を指定します。このパラメーターは、メンバーの定義から
        型を生成する場合に必須になります。
        
        型の名前および名前空間は、セッション内で一意にする必要があります。型をア
        ンロードまたは変更することはできません。型のコードを変更する必要がある場
        合、名前を変更するか、新しい Windows PowerShell セッションを起動する必要
        があります。そうしない場合、コマンドは失敗します。
        
        必須                         true
        位置                         1
        既定値                       
        パイプライン入力を許可する   false
        ワイルドカード文字を許可する false
        
    -Namespace <string>
        型の名前空間を指定します。
        
        コマンドにこのパラメーターが含まれていない場合は、Microsoft.PowerShell.C
        ommands.AddType.AutoGeneratedTypes 名前空間に型が作成されます。コマンドの
        パラメーターに空の文字列値または $null の値が含まれている場合は、グローバ
        ル名前空間に型が作成されます。
        
        必須                         false
        位置                         named
        既定値                       Microsoft.PowerShell.Commands.AddType.AutoGe
                                     neratedTypes
        パイプライン入力を許可する   false
        ワイルドカード文字を許可する false
        
    -OutputAssembly <string>
        アセンブリの DLL ファイルを指定された名前でその場所に生成します。パス (
        オプション) およびファイル名を入力します。ワイルドカード文字を使用できま
        す。既定では、Add-Type はメモリにのみアセンブリを生成します。
        
        必須                         false
        位置                         named
        既定値                       
        パイプライン入力を許可する   false
        ワイルドカード文字を許可する true
        
    -OutputType <OutputAssemblyType>
        出力アセンブリの出力の種類を指定します。有効な値は、Library、ConsoleAppl
        ication、および WindowsApplication です。既定では、出力の種類は指定され
        ません。
        
        このパラメーターは、コマンドで出力アセンブリが指定されている場合にのみ有
        効です。
        
        必須                         false
        位置                         named
        既定値                       なし
        パイプライン入力を許可する   false
        ワイルドカード文字を許可する false
        
    -PassThru [<SwitchParameter>]
        追加された型を表す System.Runtime オブジェクトを返します。既定では、この
        コマンドレットによる出力はありません。
        
        必須                         false
        位置                         named
        既定値                       
        パイプライン入力を許可する   false
        ワイルドカード文字を許可する false
        
    -Path <string[]>
        型を含むソース コード ファイルまたはアセンブリの DLL ファイルのパスを指
        定します。
        
        ソース コード ファイルを送信すると、Add-Type がファイルのコードをコンパ
        イルして型のインメモリ アセンブリを作成します。Path の値に指定されたファ
        イル名拡張子によって、Add-Type が使用するコンパイラが決定されます。
        
        アセンブリ ファイルを送信すると、Add-Type はアセンブリから型を取得します。
        インメモリ アセンブリまたはグローバル アセンブリ キャッシュを指定するに
        は、AssemblyName パラメーターを使用します。
        
        必須                         true
        位置                         1
        既定値                       
        パイプライン入力を許可する   false
        ワイルドカード文字を許可する false
        
    -ReferencedAssemblies <string[]>
        型が依存するアセンブリを指定します。既定では、Add-Type は System.dll お
        よび System.Management.Automation.dll を参照します。既定のアセンブリに加
        えて、このパラメーターを使用して指定したアセンブリも参照されます。
        
        必須                         false
        位置                         named
        既定値                       
        パイプライン入力を許可する   false
        ワイルドカード文字を許可する false
        
    -TypeDefinition <string>
        型定義を含むソース コードを指定します。文字列または here-string にソース 
        コードを入力するか、ソース コードを含む変数を入力します。here-string の詳
        細については、「about_Quoting_Rules」を参照してください。
        
        型定義に名前空間宣言を含めます。名前空間宣言を省略すると、型が別の型と同
        じ名前または別の型のショートカットを持つ可能性があり、無意識に上書きする
        ことがあります。たとえば、"Exception" という名前の型を定義した場合、"Exce
        ption" を System.Exception のショートカットとして使用するスクリプトは失敗
        します。
        
        必須                         true
        位置                         1
        既定値                       
        パイプライン入力を許可する   false
        ワイルドカード文字を許可する false
        
    -UsingNamespace <string[]>
        クラスに対して必要な他の名前空間を指定します。これは、C# の Using キーワ
        ードと非常に似ています。
        
        既定では、Add-Type は System 名前空間を参照します。MemberDefinition パラ
        メーターを使用すると、Add-Type は既定で System.Runtime.InteropServices 名
        前空間も参照します。既定の名前空間に加えて、UsingNamespace パラメーターを
        使用して追加した名前空間も参照されます。
        
        必須                         false
        位置                         named
        既定値                       
        パイプライン入力を許可する   false
        ワイルドカード文字を許可する false
        
    <CommonParameters>
        このコマンドレットは、次の共通パラメーターをサポートします: Verbose、
        Debug、ErrorAction、ErrorVariable、WarningAction、WarningVariable、
        OutBuffer、および OutVariable。詳細については、
        「get-help about_commonparameters」と入力してヘルプを参照してください。
    
入力
    なし
        パイプを使用してオブジェクトを Add-Type に渡すことはできません。
    
出力
    なし、または System.RuntimeType
        PassThru パラメーターを使用した場合、Add-Type は、新しい型を表す System.
        RuntimeType オブジェクトを返します。それ以外の場合、このコマンドレットに
        よる出力はありません。
    
メモ
        追加する型は、現在のセッションにのみ存在します。すべてのセッションで型を
        使用するには、Windows PowerShell プロファイルに型を追加します。プロファ
        イルの詳細については、「about_Profiles」を参照してください。
        
        型の名前 (および名前空間) は、セッション内で一意にする必要があります。型
        をアンロードまたは変更することはできません。型のコードを変更する必要があ
        る場合、名前を変更するか、新しい Windows PowerShell セッションを起動する
        必要があります。そうしない場合、コマンドは失敗します。
        
        IronPython や JSharp などの一部の言語の CodeDomProvider クラスは、出力を
        生成しません。その結果、これらの言語で書かれた型は Add-Type に使用できま
        せん。
        
        このコマンドレットは CodeDomProvider クラスに基づいています。このクラス
        の詳細については、Microsoft .NET Framework SDK を参照してください。
        
    -------------------------- 例 1 --------------------------
    
    C:\PS>$source = @"
    public class BasicTest
    {
        public static int Add(int a, int b)
        {
            return (a + b);
        }
    
        public int Multiply(int a, int b)
        {
            return (a * b);
        }
    }
    "@
    
    C:\PS> Add-Type -TypeDefinition $source
    
    C:\PS> [BasicTest]::Add(4, 3)
    
    C:\PS> $basicTestObject = New-Object BasicTest 
    C:\PS> $basicTestObject.Multiply(5, 2)
    
    説明
    -----------
    これらのコマンドは、変数に保存されたソース コードを指定することによって、セ
    ッションに BasicTest クラスを追加します。この型には、Add という静的メソッド
    と、Multiply という非静的メソッドがあります。
    
    最初のコマンドは、$source 変数にクラスのソース コードを保存します。
    
    2 番目のコマンドは、Add-Type コマンドレットを使用してセッションにクラスを追
    加します。インライン ソース コードを使用しているため、このコマンドは TypeDef
    inition パラメーターを使用して $source 変数にコードを指定します。
    
    残りのコマンドは新しいクラスを使用します。
    
    3 番目のコマンドは、BasicTest クラスの Add 静的メソッドを呼び出します。これ
    はダブルコロン文字 (::) を使用して、クラスの静的メンバーを指定します。
    
    4 番目のコマンドは、New-Object コマンドレットを使用して BasicTest クラスのイ
    ンスタンスをインスタンス化します。新しいオブジェクトは $basicTestObject 変数
    に保存されます。
    
    5 番目のコマンドは、$basicTestObject の Multiply メソッドを使用します。
    
    -------------------------- 例 2 --------------------------
    
    C:\PS>[BasicTest] | get-member
    
    C:\PS> [BasicTest] | get-member -static
    
    C:\PS> $basicTestObject | get-member
    
    C:\PS> [BasicTest] | get-member
    
       TypeName: System.RuntimeType
    
    Name                           MemberType Definition
    ----                           ---------- ----------
    Clone                          Method     System.Object Clone()
    Equals                         Method     System.Boolean Equals
    FindInterfaces                 Method     System.Type[] FindInt
    ...
    
    
    C:\PS> [BasicTest] | get-member -static
    
       TypeName: BasicTest
    
    Name            MemberType Definition
    ----            ---------- ----------
    Add             Method     static System.Int32 Add(Int32 a, Int32 b)
    Equals          Method     static System.Boolean Equals(Object objA,
    ReferenceEquals Method     static System.Boolean ReferenceEquals(Obj
    
    
    C:\PS> $basicTestObject | get-member
    
       TypeName: BasicTest
    
    Name        MemberType Definition
    ----        ---------- ----------
    Equals      Method     System.Boolean Equals(Object obj)
    GetHashCode Method     System.Int32 GetHashCode()
    GetType     Method     System.Type GetType()
    Multiply    Method     System.Int32 Multiply(Int32 a, Int32 b)
    ToString    Method     System.String ToString()
    
    説明
    -----------
    これらのコマンドは、Get-Member コマンドレットを使用して、Add-Type コマンドレ
    ットおよび New-Object コマンドレットにより前の例で作成されたオブジェクトを確
    認します。
    
    最初のコマンドは、Get-Member コマンドレットを使用して、Add-Type によりセッシ
    ョンに追加された BasicTest クラスの型とメンバーを取得します。Get-Member コマ
    ンドによって、System.Object クラスから派生しているのが System.RuntimeType オ
    ブジェクトであることがわかります。
    
    2 番目のコマンドは、Get-Member の Static パラメーターを使用して、BasicTest 
    クラスの静的プロパティとメソッドを取得します。出力には、Add メソッドが含まれ
    ていることが示されています。
    
    3 番目のコマンドは、Get-Member を使用して、$BasicTestObject 変数に保存されて
    いるオブジェクトのメンバーを取得します。これは、New-Object コマンドレットを
    使用して $BasicType クラスで作成されたオブジェクト インスタンスです。
    
    出力では、$basicTestObject 変数の値が BasicTest クラスのインスタンスで Multi
    ply というメンバーを含むことがわかります。
    
    -------------------------- 例 3 --------------------------
    
    C:\PS>$accType = add-type -assemblyname accessib* -passthru
    
    説明
    -----------
    このコマンドは、Accessibility アセンブリのクラスを現在のセッションに追加しま
    す。コマンドは、AssemblyName パラメーターを使用してアセンブリの名前を指定しま
    す。ワイルドカード文字により、名前やスペルが確かでない場合でも正しいアセンブ
    リを取得できます。
    
    このコマンドは、PassThru パラメーターを使用して、セッションに追加されたクラ
    スを表すオブジェクトを生成し、そのオブジェクトを $accType 変数に保存します。
    
    -------------------------- 例 4 --------------------------
    
    C:\PS>add-type -path c:\ps-test\Hello.vb
    
    [VBFromFile]::SayHello(", World")
    
    # From Hello.vb
    Public Class VBFromFile
    
    Public Shared Function SayHello(sourceName As String) As String
    Dim myValue As String = "Hello"
    
    return myValue + sourceName
    End Function
    End Class
    
    C:\PS> [VBFromFile]::SayHello(", World")
    Hello, World
    
    説明
    -----------
    この例は、Add-Type コマンドレットを使用して、Hello.vb ファイルに定義されてい
    る VBFromFile クラスを現在のセッションに追加します。Hello.vb ファイルのテキ
    ストは、コマンドの出力に表示されます。
    
    最初のコマンドは、Add-Type コマンドレットを使用して、Hello.vb ファイルに定義
    されている型を現在のセッションに追加します。このコマンドは、Path パラメータ
    ーを使用してソース ファイルを指定します。
    
    2 番目のコマンドは、SayHello 関数を VBFromFile クラスの静的メソッドとして呼
    び出します。
    
    -------------------------- 例 5 --------------------------
    
    C:\PS>$signature = @"
    [DllImport("user32.dll")]
    public static extern bool ShowWindowAsync(IntPtr hWnd, int nCmdShow);
    "@
    
    $showWindowAsync = Add-Type -memberDefinition $signature -name "Win32ShowWin
    dowAsync" -namespace Win32Functions -passThru
    
    # Minimize the Windows PowerShell console
    $showWindowAsync::ShowWindowAsync((Get-Process -id $pid).MainWindowHandle, 2) 
    
    # Restore it
    $showWindowAsync::ShowWindowAsync((Get-Process -id $pid).MainWindowHandle, 4)
    
    説明
    -----------
    この例のコマンドは、Windows PowerShell でネイティブ Windows API を呼び出す方
    法を示します。Add-Type は、プラットフォーム Invoke (P/Invoke) メカニズムを使
    用して、Windows PowerShell から User32.dll の関数を呼び出します。
    
    最初のコマンドは、ShowWindowAsyn 関数の C# 署名を $signature 変数に保存しま
    す (詳細については、MSDN ライブラリの「ShowWindowAsync Function (ShowWindowA
    sync 関数)」(http://go.microsoft.com/fwlink/?LinkId=143643) を参照してくださ
    い)。結果のメソッドが Windows PowerShell セッションに表示されることを確認す
    るために、"public" キーワードが標準署名に追加されています。
    
    2 番目のコマンドは、Add-Type コマンドレットを使用して Add-Type により作成され
    るクラスの静的メソッドとして ShowWindowAsync 関数を Windows PowerShell セッシ
    ョンに追加します。このコマンドは、MemberDefinition パラメーターを使用して $si
    gnature 変数に保存されたメソッド定義を指定します。
     
    このコマンドは、Name パラメーターおよび Namespace パラメーターを使用して、ク
    ラスの名前と名前空間を指定します。これは、PassThru パラメーターを使用して型を
    表すオブジェクトを生成し、そのオブジェクトを $showWindowAsync 変数に保存しま
    す。
    
    3 番目と 4 番目のコマンドは新しい ShowWindowAsync 静的メソッドを使用します。
    このメソッドには、ウィンドウ ハンドル、およびウィンドウの表示方法を指定する整
    数という 2 つのパラメーターがあります。
    
    3 番目のコマンドは ShowWindowAsync を呼び出します。これは Get-Process コマン
    ドレットを $pid 自動変数と共に使用して、現在の Windows PowerShell セッション
    をホストしているプロセスを取得します。その後、現在のプロセスの MainWindowHand
    le プロパティと、SW_MINIMIZE 値を表す値 "2" を使用します。
    
    4 番目のコマンドは、ウィンドウを復元するために、ウィンドウの位置に対して値 "4" 
    (SW_RESTORE 値を表す) を使用します (SW_MAXIMIZE は 3 です)。
    
    -------------------------- 例 6 --------------------------
    
    C:\PS>Add-Type -MemberDefinition $jsMethod -Name "PrintInfo" -Language JScri
    pt
    
    説明
    -----------
    このコマンドは、Add-Type コマンドレットを使用して、インライン JScript コード
    のメソッドを Windows PowerShell セッションに追加します。これは MemberDefinit
    ion パラメーターを使用して、$jsMethod 変数に保存されたソース コードを送信しま
    す。また、Name 変数を使用して Add-Type によりメソッドに作成されるクラスの名前
    を指定し、Language パラメーターを使用して JScript 言語を指定します。
    
    -------------------------- 例 7 --------------------------
    
    C:\PS>Add-Type -Path FSharp.Compiler.CodeDom.dll
    
    C:\PS> Add-Type -Path FSharp.Compiler.CodeDom.dll
    C:\PS> $provider = New-Object Microsoft.FSharp.Compiler.CodeDom.FSharpCodePr
    ovider
    
    C:\PS> $fSharpCode = @" 
    let rec loop n = 
    if n <= 0 then () else begin
    print_endline (string_of_int n);
    loop (n-1)
    end
    "@
    
    C:\PS> $fsharpType = Add-Type -TypeDefinition $fSharpCode -CodeDomProvider $p
    rovider -PassThru | where { $_.IsPubli
    c }
    C:\PS> $fsharpType::loop(4)
    4
    3
    2
    1
    
    
    説明
    -----------
    この例は、Add-Type コマンドレットを使用して FSharp コード コンパイラを Windo
    ws PowerShell セッションに追加する方法を示しています。Windows PowerShell で
    この例を実行するには、FSharp 言語でインストールされた FSharp.Compiler.CodeDo
    m.dll が存在する必要があります。
    
    例の最初のコマンドは、Add-Type コマンドレットを Path パラメーターと共に使用
    してアセンブリを指定します。Add-Type は、アセンブリの型を取得します。
    
    2 番目のコマンドは、New-Object コマンドレットを使用して FSharp コード プロバ
    イダーのインスタンスを作成し、結果を $provider 変数に保存します。
    
    3 番目のコマンドは、$FSharpCode 変数に Loop メソッドを定義する FSharp コード
    を保存します。
    
    4 番目のコマンドは、Add-Type コマンドレットを使用して、$fSharpCode に定義され
    たパブリック型を $fSharpType 変数に保存します。TypeDefinition パラメーターは、
    型を定義するソース コードを指定します。CodeDomProvider パラメーターはソース 
    コード コンパイラを指定します。
    
    PassThru パラメーターは、型を表す Runtime オブジェクトを返すことを Add-Type 
    に指示し、Runtime オブジェクトがパイプライン演算子 (|) によりパブリック型のみ
    を返す Where-Object コマンドレットに送られます。FSharp プロバイダーは非パブリ
    ック型を作成して結果のパブリック型をサポートするため、Where-Object フィルター
    が使用されます。
    
    5 番目のコマンドは、Loop メソッドを、$fSharpType 変数に保存された型の静的メソ
    ッドとして呼び出します。
    
関連するリンク
    Online version: http://go.microsoft.com/fwlink/?LinkID=135195
    Add-Member 
    New-Object 
    	
記事で解説しているパソコンの環境
 基本ソフト: Windows 7
 キーワード: Windows PowerShell、ヘルプ、Cmdlet、Add-Type
ご利用数: 1912631
感想・要望・問い合わせは こちら