Add-Type

Microsoft .NET Framework 型 (クラス) を Windows PowerShell セッションに追加します。

構文

Add-Type -AssemblyName <string[]> [-IgnoreWarnings] [-PassThru] [<CommonParameters>]

Add-Type [-Name] <string> [-MemberDefinition] <string[]> [-CodeDomProvider <CodeDomProvider>] [-CompilerParameters <CompilerParameters>] [-Language {<CSharp> | <CSharpVersion3> | <VisualBasic> | <JScript>}] [-Namespace <string>] [-OutputAssembly <string>] [-OutputType <OutputAssemblyType>] [-ReferencedAssemblies <string[]>] [-UsingNamespace <string[]>] [-IgnoreWarnings] [-PassThru] [<CommonParameters>]

Add-Type [-Path] <string[]> [-CompilerParameters <CompilerParameters>] [-OutputAssembly <string>] [-OutputType <OutputAssemblyType>] [-ReferencedAssemblies <string[]>] [-IgnoreWarnings] [-PassThru] [<CommonParameters>]

Add-Type [-TypeDefinition] <string> [-CodeDomProvider <CodeDomProvider>] [-CompilerParameters <CompilerParameters>] [-Language {<CSharp> | <CSharpVersion3> | <VisualBasic> | <JScript>}] [-OutputAssembly <string>] [-OutputType <OutputAssemblyType>] [-ReferencedAssemblies <string[]>] [-IgnoreWarnings] [-PassThru] [<CommonParameters>]

説明

Add-Type コマンドレットを使用すると、Windows PowerShell セッションで .NET Framework クラスを定義できます。その後で、(New-Object コマンドレットを使用して) オブジェクトをインスタンス化して、.NET Framework オブジェクトを使用する場合と同様にオブジェクトを使用できます。Windows PowerShell プロファイルに Add-Type コマンドを追加すると、すべての Windows PowerShell セッションでクラスを使用できるようになります。

既存のアセンブリ ファイルまたはソース コード ファイルを指定することによって型を指定するか、インラインでソース コードを指定するか、または変数に保存されているソース コードを指定することができます。メソッドのみを指定することもできます。この場合は Add-Type によってクラスが定義および生成されます。この機能を使用して、Windows PowerShell でアンマネージ関数に対するプラットフォーム Invoke (P/Invoke) 呼び出しを行うことができます。ソース コードを使用すると、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 compiler

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

false

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

false

-CompilerParameters <CompilerParameters>

ソース コード コンパイラのオプションを指定します。これらのオプションは、改訂なしでコンパイラに送られます。

このパラメーターを使用すると、実行可能ファイルの生成、リソースの埋め込み、"/unsafe" オプションなどのコマンド ライン オプションの設定をコンパイラに指示できます。このパラメーターは、CompilerParameters クラス (System.CodeDom.Compiler.CompilerParameters) を実装します。

必須

false

位置

named

既定値

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

false

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

false

-IgnoreWarnings

コンパイラ警告を無視します。このパートナーを使用して、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.Commands.AddType.AutoGeneratedTypes 名前空間に型が作成されます。コマンドのパラメーターに空の文字列値または $null の値が含まれている場合は、グローバル名前空間に型が作成されます。

必須

false

位置

named

既定値

Microsoft.PowerShell.Commands.AddType.AutoGeneratedTypes

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

false

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

false

-OutputAssembly <string>

アセンブリの DLL ファイルを指定された名前でその場所に生成します。パス (オプション) およびファイル名を入力します。ワイルドカード文字を使用できます。既定では、Add-Type はメモリにのみアセンブリを生成します。

必須

false

位置

named

既定値

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

false

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

true

-OutputType <OutputAssemblyType>

出力アセンブリの出力の種類を指定します。有効な値は、Library、ConsoleApplication、および WindowsApplication です。

既定では、出力の種類は指定されません。

このパラメーターは、コマンドで出力アセンブリが指定されている場合にのみ有効です。

必須

false

位置

named

既定値

なし

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

false

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

false

-PassThru

追加された型を表す 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" という名前の型を定義した場合、"Exception" を 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、-OutBuffer、および -OutVariable。詳細については、次を参照してください: 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 コマンドレットを使用してセッションにクラスを追加します。インライン ソース コードを使用しているため、このコマンドは TypeDefinition パラメーターを使用して $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 クラスのインスタンスで Multiply というメンバーを含むことがわかります。





例 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 "Win32ShowWindowAsync" -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 (ShowWindowAsync 関数)」(http://go.microsoft.com/fwlink/?LinkId=143643) を参照してください)。結果のメソッドが Windows PowerShell セッションに表示されることを確認するために、"public" キーワードが標準署名に追加されています。

2 番目のコマンドは、Add-Type コマンドレットを使用して Add-Type により作成されるクラスの静的メソッドとして ShowWindowAsync 関数を Windows PowerShell セッションに追加します。このコマンドは、MemberDefinition パラメーターを使用して $signature 変数に保存されたメソッド定義を指定します。
 
このコマンドは、Name パラメーターおよび Namespace パラメーターを使用して、クラスの名前と名前空間を指定します。これは、PassThru パラメーターを使用して型を表すオブジェクトを生成し、そのオブジェクトを $showWindowAsync 変数に保存します。

3 番目と 4 番目のコマンドは新しい ShowWindowAsync 静的メソッドを使用します。このメソッドには、ウィンドウ ハンドル、およびウィンドウの表示方法を指定する整数という 2 つのパラメーターがあります。

3 番目のコマンドは ShowWindowAsync を呼び出します。これは Get-Process コマンドレットを $pid 自動変数と共に使用して、現在の Windows PowerShell セッションをホストしているプロセスを取得します。その後、現在のプロセスの MainWindowHandle プロパティと、SW_MINIMIZE 値を表す値 "2" を使用します。

4 番目のコマンドは、ウィンドウを復元するために、ウィンドウの位置に対して値 "4" (SW_RESTORE 値を表す) を使用します (SW_MAXIMIZE は 3 です)。





例 6

C:\PS>Add-Type -MemberDefinition $jsMethod -Name "PrintInfo" -Language JScript

説明
-----------
このコマンドは、Add-Type コマンドレットを使用して、インライン JScript コードのメソッドを Windows PowerShell セッションに追加します。これは MemberDefinition パラメーターを使用して、$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.FSharpCodeProvider

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 $provider -PassThru | where { $_.IsPublic }
C:\PS> $fsharpType::loop(4)
4
3
2
1

説明
-----------
この例は、Add-Type コマンドレットを使用して FSharp コード コンパイラを Windows PowerShell セッションに追加する方法を示しています。Windows PowerShell でこの例を実行するには、FSharp 言語でインストールされた FSharp.Compiler.CodeDom.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 変数に保存された型の静的メソッドとして呼び出します。





関連項目

概念

Add-Member
New-Object