Add-Type

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

構文

Add-Type
   [-TypeDefinition] <String>
   [-Language <Language>]
   [-ReferencedAssemblies <String[]>]
   [-OutputAssembly <String>]
   [-OutputType <OutputAssemblyType>]
   [-PassThru]
   [-IgnoreWarnings]
   [-CompilerOptions <String[]>]
   [<CommonParameters>]
Add-Type
   [-Name] <String>
   [-MemberDefinition] <String[]>
   [-Namespace <String>]
   [-UsingNamespace <String[]>]
   [-Language <Language>]
   [-ReferencedAssemblies <String[]>]
   [-OutputAssembly <String>]
   [-OutputType <OutputAssemblyType>]
   [-PassThru]
   [-IgnoreWarnings]
   [-CompilerOptions <String[]>]
   [<CommonParameters>]
Add-Type
   [-Path] <String[]>
   [-ReferencedAssemblies <String[]>]
   [-OutputAssembly <String>]
   [-OutputType <OutputAssemblyType>]
   [-PassThru]
   [-IgnoreWarnings]
   [-CompilerOptions <String[]>]
   [<CommonParameters>]
Add-Type
   -LiteralPath <String[]>
   [-ReferencedAssemblies <String[]>]
   [-OutputAssembly <String>]
   [-OutputType <OutputAssemblyType>]
   [-PassThru]
   [-IgnoreWarnings]
   [-CompilerOptions <String[]>]
   [<CommonParameters>]
Add-Type
   -AssemblyName <String[]>
   [-PassThru]
   [<CommonParameters>]

説明

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

既存のアセンブリまたはソース コード ファイルを指定して型を指定することも、インラインで、または変数に保存されたソース コードを指定することもできます。 メソッドのみを指定し、 Add-Type クラスを定義して生成することもできます。 Windows では、この機能を使用して、PowerShell でアンマネージ関数にプラットフォーム呼び出し (P/Invoke) 呼び出しを行うことができます。 ソース コードを指定する場合は、 Add-Type 指定したソース コードをコンパイルし、新しい .NET Core 型を含むメモリ内アセンブリを生成します。

パラメーターを Add-Type 使用して代替言語とコンパイラを指定できます。C# は既定、コンパイラ オプション、アセンブリ依存関係、クラス名前空間、型の名前、結果のアセンブリです。

PowerShell 7 以降では、 Add-Type 同じ名前の型が既に存在する場合、型はコンパイルされません。 また、Add-Type次を含むpwsh.dllフォルダーの下にあるrefフォルダー内のアセンブリを探します。

例 1: セッションに .NET 型を追加する

この例では、変数に格納されているソース コードを指定して、 BasicTest クラスをセッションに追加します。 BasicTest クラスは、整数の追加、オブジェクトの作成、整数の乗算に使用されます。

$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);
    }
}
"@

Add-Type -TypeDefinition $Source
[BasicTest]::Add(4, 3)
$BasicTestObject = New-Object BasicTest
$BasicTestObject.Multiply(5, 2)

変数には $Source 、クラスのソース コードが格納されます。 型には静的メソッドが呼び出 Add され、非静的メソッドが呼び出されます Multiply

コマンドレットは Add-Type 、セッションにクラスを追加します。 インライン ソース コードを使用しているため、コマンドは TypeDefinition パラメーターを使用して変数内のコードを $Source 指定します。

BasicTest クラスの静的メソッドはAdd、二重コロン文字 (::) を使用してクラスの静的メンバーを指定します。 整数が追加され、合計が表示されます。

このコマンドレットは New-ObjectBasicTest クラスのインスタンスをインスタンス化します。 新しいオブジェクトが変数に $BasicTestObject 保存されます。

$BasicTestObject はメソッドを使用します Multiply 。 整数が乗算され、積が表示されます。

例 2: 追加された型を調べる

この例では、コマンドレットをGet-Member使用して、例 1 で作成したAdd-TypeオブジェクトとNew-Objectコマンドレットを調べます。

[BasicTest] | Get-Member

TypeName: System.RuntimeType

Name                 MemberType Definition
----                 ---------- ----------
AsType               Method     type AsType()
Clone                Method     System.Object Clone(), System.Object ICloneable.Clone()
Equals               Method     bool Equals(System.Object obj), bool Equals(type o)
FindInterfaces       Method     type[] FindInterfaces(System.Reflection.TypeFilter filter...
...

[BasicTest] | Get-Member -Static

TypeName: BasicTest

Name            MemberType Definition
----            ---------- ----------
Add             Method     static int Add(int a, int b)
Equals          Method     static bool Equals(System.Object objA, System.Object objB)
new             Method     BasicTest new()
ReferenceEquals Method     static bool ReferenceEquals(System.Object objA, System.Object objB)

$BasicTestObject | Get-Member

TypeName: BasicTest

Name        MemberType Definition
----        ---------- ----------
Equals      Method     bool Equals(System.Object obj)
GetHashCode Method     int GetHashCode()
GetType     Method     type GetType()
Multiply    Method     int Multiply(int a, int b)
ToString    Method     string ToString()

このコマンドレットは Get-Member 、セッションに追加された BasicTest クラス Add-Type の型とメンバーを取得します。 このコマンドはGet-Member、System.Object クラスから派生した System.RuntimeType オブジェクトであることを示します。

Static パラメーターはGet-MemberBasicTest クラスの静的プロパティとメソッドを取得します。 出力は、メソッドが含まれていることを Add 示しています。

コマンドレットは Get-Member 、変数に格納されているオブジェクトのメンバーを $BasicTestObject 取得します。 $BasicTestObject、BasicTest クラスでコマンドレットをNew-Object使用して作成されました。 出力では、変数の $BasicTestObject 値が BasicTest クラスのインスタンスであり、呼び出された Multiplyメンバーが含まれています。

例 3: アセンブリから型を追加する

次の使用例は、アセンブリから現在の NJsonSchema.dll セッションにクラスを追加します。

Set-Location -Path $PSHOME
$AccType = Add-Type -AssemblyName *jsonschema* -PassThru

Set-LocationPath パラメーターを使用して変数を $PSHOME 指定します。 変数は、DLL ファイルが配置されている PowerShell インストール ディレクトリを参照します。

変数には $AccType 、コマンドレットで作成されたオブジェクトが Add-Type 格納されます。 Add-TypeAssemblyName パラメーターを使用してアセンブリの名前を指定します。 アスタリスク (*) ワイルドカード文字を使用すると、名前やそのスペルが不明な場合でも、正しいアセンブリを取得できます。 PassThru パラメーターは、セッションに追加されるクラスを表すオブジェクトを生成します。

例 4: ネイティブ Windows API を呼び出す

この例では、PowerShell でネイティブ Windows API を呼び出す方法を示します。 Add-Type では、プラットフォーム呼び出し (P/Invoke) メカニズムを使用して PowerShell から関数 User32.dll を呼び出します。 この例は、Windows オペレーティング システムを実行しているコンピューターでのみ機能します。

$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 PowerShell console

$ShowWindowAsync::ShowWindowAsync((Get-Process -Id $pid).MainWindowHandle, 2)

# Restore the PowerShell console

$ShowWindowAsync::ShowWindowAsync((Get-Process -Id $Pid).MainWindowHandle, 4)

変数には $Signature 、関数の C# シグネチャが ShowWindowAsync 格納されます。 結果のメソッドが PowerShell セッションで確実に表示されるように、 public キーワードが標準シグネチャに追加されました。 詳細については、「 ShowWindowAsync 関数」を参照してください。

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

新しい ShowWindowAsync 静的メソッドは、PowerShell コンソールを最小化および復元するためにコマンドで使用されます。 このメソッドは、ウィンドウ ハンドルと、ウィンドウの表示方法を指定する整数の 2 つのパラメーターを受け取ります。

PowerShell コンソールを最小化するには、 ShowWindowAsync コマンドレットと Get-Process 自動変数を $PID 使用して、現在の PowerShell セッションをホストしているプロセスを取得します。 次に、現在のプロセスの MainWindowHandle プロパティと、値を表す値 2である MainWindowHandle プロパティを SW_MINIMIZE 使用します。

ウィンドウを復元するには、 ShowWindowAsync 値を表すウィンドウ位置 4 の値を SW_RESTORE 使用します。

ウィンドウを最大化するには、その値 3 を使用 SW_MAXIMIZEします。

パラメーター

-AssemblyName

型を含むアセンブリの名前を指定します。 Add-Type は、指定したアセンブリから型を受け取ります。 このパラメーターは、アセンブリ名に基づいて型を作成する場合に必要です。

アセンブリの完全名または単純名 (部分名とも呼ばれます) を入力します。 アセンブリ名ではワイルドカード文字を使用できます。 単純または部分的な名前を入力した場合は、 Add-Type 完全な名前に解決し、完全な名前を使用してアセンブリを読み込みます。

このパラメーターは、パスまたはファイル名を受け取りません。 アセンブリ ダイナミック リンク ライブラリ (DLL) ファイルへのパスを入力するには、 Path パラメーターを使用します。

Type:String[]
Aliases:AN
Position:Named
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:True

-CompilerOptions

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

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

同じコマンドで CompilerOptions パラメーターと ReferencedAssemblies パラメーターを使用することはできません。

Type:String[]
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-IgnoreWarnings

コンパイラの警告は無視します。 コンパイラ警告をエラーとして処理しないように Add-Type するには、このパラメーターを使用します。

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Language

ソース コードで使用される言語を指定します。 このパラメーターの許容される値は次のようになります。

  • CSharp
Type:Language
Accepted values:CSharp
Position:Named
Default value:CSharp
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-LiteralPath

型を含むソース コード ファイルまたはアセンブリ DLL ファイルへのパスを指定します。 Path とは異なり、LiteralPath パラメーターの値は、型指定されたとおりに使用されます。 ワイルドカードとして解釈される文字はありません。 パスにエスケープ文字が含まれている場合は、単一引用符で囲みます。 単一引用符は、文字をエスケープ シーケンスとして解釈しないように PowerShell に指示します。

Type:String[]
Aliases:PSPath, LP
Position:Named
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-MemberDefinition

クラスの新しいプロパティまたはメソッドを指定します。 Add-Type は、プロパティまたはメソッドをサポートするために必要なテンプレート コードを生成します。

Windows では、この機能を使用して、PowerShell のアンマネージド関数に対してプラットフォーム呼び出し (P/Invoke) 呼び出しを行うことができます。

Type:String[]
Position:1
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-Name

作成するクラスの名前を指定します。 メンバー定義から型を生成する場合は、このパラメーターは必須です。

型名と名前空間はセッション内で一意である必要があります。 型をアンロードしたり、変更したりすることはできません。 型のコードを変更するには、名前を変更するか、新しい PowerShell セッションを開始する必要があります。 それ以外の場合、コマンドは失敗します。

Type:String
Position:0
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-Namespace

型の名前空間を指定します。

このパラメーターがコマンドに含まれていない場合、型は Microsoft.PowerShell.Commands.AddType.AutoGeneratedTypes 名前空間に作成されます。 パラメーターが空の文字列値または値 $Nullを持つコマンドに含まれている場合、型はグローバル名前空間で生成されます。

Type:String
Aliases:NS
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-OutputAssembly

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

Type:String
Aliases:OA
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:True

-OutputType

出力アセンブリの出力の種類を指定します。 既定では、出力の種類は指定されていません。 このパラメーターは、コマンドで出力アセンブリが指定されている場合にのみ有効です。 値の詳細については、「 OutputAssemblyType 列挙型」を参照してください。

このパラメーターで使用できる値は次のとおりです。

  • ConsoleApplication
  • Library
  • WindowsApplication

重要

PowerShell 7.1 以降ではサポートされておらず、 ConsoleApplicationWindowsApplication いずれかの値が OutputType パラメーターの値として指定されている場合、PowerShell は終了エラーをスローします。

Type:OutputAssemblyType
Aliases:OT
Accepted values:ConsoleApplication, Library, WindowsApplication
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-PassThru

追加された型を表す System.Runtime オブジェクトを返します。 既定では、このコマンドレットは出力を生成しません。

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Path

型を含むソース コード ファイルまたはアセンブリ DLL ファイルへのパスを指定します。

ソース コード ファイルを送信する場合は、 Add-Type ファイル内のコードをコンパイルし、型のメモリ内アセンブリを作成します。 Path の値で指定されたファイル拡張子によって、使用するコンパイラがAdd-Type決まります。

アセンブリ ファイルを送信する場合は、 Add-Type アセンブリから型を受け取ります。 メモリ内アセンブリまたはグローバル アセンブリ キャッシュを指定するには、AssemblyName パラメーターを使用します。

Type:String[]
Position:0
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-ReferencedAssemblies

型が依存しているアセンブリを指定します。 既定では、 Add-Type 参照 System.dllSystem.Management.Automation.dll. 既定のアセンブリに加え、このパラメーターを使用して指定されたアセンブリも参照されます。

PowerShell 6 以降、 ReferencedAssemblies には既定の .NET アセンブリは含まれません。 このパラメーターに渡される値には、それらに対する特定の参照を含める必要があります。

同じコマンドで CompilerOptions パラメーターと ReferencedAssemblies パラメーターを使用することはできません。

Type:String[]
Aliases:RA
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-TypeDefinition

型定義を含むソース コードを指定します。 文字列またはヒア文字列のソース コードを入力するか、ソース コードを含む変数を入力します。 here-strings の詳細については、 about_Quoting_Rulesを参照してください。

型定義に、名前空間宣言を含めます。 名前空間の宣言を省略すると、型が別の型または別の型のショートカットと同名となり、意図しない上書きを引き起こす場合があります。 たとえば、Exception という型を定義すると、System.Exception のショートカットとして例外を使用するスクリプトは失敗します。

Type:String
Position:0
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-UsingNamespace

クラスに必要な他の名前空間を指定します。 これは C# キーワード Usingとよく似ています。

既定では、 Add-TypeSystem 名前空間を参照します。 MemberDefinition パラメーターを使用する場合は、Add-Type既定で System.Runtime.InteropServices 名前空間も参照します。 既定の名前空間に加え、UsingNamespace パラメーターを使用して追加された名前空間も参照されます。

Type:String[]
Aliases:Using
Position:Named
Default value:System namespace
Required:False
Accept pipeline input:False
Accept wildcard characters:False

入力

None

パイプライン Add-Typeの下にオブジェクトを送信することはできません。

出力

None or System.Type

PassThru パラメーターを使用すると、Add-Type新しい型を表す System.Type オブジェクトを返します。 それ以外の場合、このコマンドレットは出力を生成しません。

メモ

追加した型は、現在のセッションのみに存在します。 すべてのセッションで種類を使用するには、PowerShell プロファイルに追加します。 プロファイルの詳細については、「 about_Profiles」を参照してください。

型名と名前空間は、セッション内で一意である必要があります。 型をアンロードしたり、変更したりすることはできません。 型のコードを変更する必要がある場合は、名前を変更するか、新しい PowerShell セッションを開始する必要があります。 それ以外の場合、コマンドは失敗します。

Windows PowerShell (バージョン 5.1 以降) では、まだ読み込まれていないものに使用Add-Typeする必要があります。 最も一般的に、これはグローバル アセンブリ キャッシュ (GAC) に含まれるアセンブリに適用されます。 PowerShell 6 以降では GAC がないため、PowerShell では独自のアセンブリが $PSHomeインストールされます。 これらのアセンブリは要求に応じて自動的に読み込まれるため、読み込みに使用 Add-Type する必要はありません。 ただし、 Add-Type スクリプトが PowerShell の任意のバージョンと暗黙的に互換性を持つよう、使用は引き続き許可されています。

GAC 内のアセンブリは、パスではなく型名で読み込むことができます。 任意のパスからアセンブリを読み込むには、アセンブリを自動的に読み込むことができないため、必要 Add-Typeです。