Add-Type
Přidá třídu Microsoft .NET do relace PowerShellu.
Syntaxe
Add-Type
[-CodeDomProvider <CodeDomProvider>]
[-CompilerParameters <CompilerParameters>]
[-TypeDefinition] <String>
[-Language <Language>]
[-ReferencedAssemblies <String[]>]
[-OutputAssembly <String>]
[-OutputType <OutputAssemblyType>]
[-PassThru]
[-IgnoreWarnings]
[<CommonParameters>]
Add-Type
[-CodeDomProvider <CodeDomProvider>]
[-CompilerParameters <CompilerParameters>]
[-Name] <String>
[-MemberDefinition] <String[]>
[-Namespace <String>]
[-UsingNamespace <String[]>]
[-Language <Language>]
[-ReferencedAssemblies <String[]>]
[-OutputAssembly <String>]
[-OutputType <OutputAssemblyType>]
[-PassThru]
[-IgnoreWarnings]
[<CommonParameters>]
Add-Type
[-CompilerParameters <CompilerParameters>]
[-Path] <String[]>
[-ReferencedAssemblies <String[]>]
[-OutputAssembly <String>]
[-OutputType <OutputAssemblyType>]
[-PassThru]
[-IgnoreWarnings]
[<CommonParameters>]
Add-Type
[-CompilerParameters <CompilerParameters>]
-LiteralPath <String[]>
[-ReferencedAssemblies <String[]>]
[-OutputAssembly <String>]
[-OutputType <OutputAssemblyType>]
[-PassThru]
[-IgnoreWarnings]
[<CommonParameters>]
Add-Type
-AssemblyName <String[]>
[-PassThru]
[-IgnoreWarnings]
[<CommonParameters>]
Description
Rutina Add-Type
umožňuje definovat třídu rozhraní Microsoft .NET Framework v relaci PowerShellu.
Pak můžete pomocí rutiny New-Object
vytvořit instanci objektů a používat objekty stejně jako jakýkoli objekt rozhraní .NET Framework. Pokud do profilu PowerShellu Add-Type
přidáte příkaz, třída je k dispozici ve všech relacích PowerShellu.
Typ můžete zadat zadáním existujícího sestavení nebo souborů zdrojového kódu nebo můžete zadat zdrojový kód vložený nebo uložený v proměnné. Můžete dokonce zadat pouze metodu a Add-Type
definovat a generovat třídu. Ve Windows můžete pomocí této funkce v PowerShellu volat volání nespravovaných funkcí (P/Invoke). Pokud zadáte zdrojový kód, Add-Type
zkompiluje zadaný zdrojový kód a vygeneruje sestavení v paměti, které obsahuje nové typy rozhraní .NET Framework.
Parametry můžete použít Add-Type
k určení alternativního jazyka a kompilátoru, jazyk C# je výchozí, možnosti kompilátoru, závislosti sestavení, obor názvů třídy, názvy typu a výsledné sestavení.
Příklady
Příklad 1: Přidání typu .NET do relace
Tento příklad přidá BasicTest třídy do relace zadáním zdrojového kódu, který je uložen v proměnné. BasicTest třída slouží k přidání celých čísel, vytvoření objektu a násobení celých čísel.
$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)
Proměnná $Source
ukládá zdrojový kód pro třídu. Typ má volanou Add
statickou metodu a nestatická metoda s názvem Multiply
.
Rutina Add-Type
přidá třídu do relace. Protože používá vložený zdrojový kód, příkaz použije parametr TypeDefinition k určení kódu v $Source
proměnné.
Add
Statická metoda Třídy BasicTest používá dvojité dvojtečky znaků (::
) k určení statického členu třídy. Přičtou se celá čísla a zobrazí se součet.
Rutina New-Object
vytvoří instanci třídy BasicTest . Uloží nový objekt do $BasicTestObject
proměnné.
$BasicTestObject
používá metodu Multiply
. Celá čísla se vynásobí a zobrazí se součin.
Příklad 2: Prozkoumání přidaného typu
Tento příklad používá rutinu Get-Member
k prozkoumání objektů vytvořených Add-Type
New-Object
v příkladu 1.
[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()
Rutina Get-Member
získá typ a členy třídy BasicTest , která byla Add-Type
přidána do relace. Příkaz Get-Member
zjistí, že se jedná o objekt System.RuntimeType , který je odvozen z Třídy System.Object .
Get-Member
Statický parametr získá statické vlastnosti a metody BasicTest třídy. Výstup ukazuje, že Add
metoda je zahrnuta.
Rutina Get-Member
získá členy objektu uloženého $BasicTestObject
v proměnné.
$BasicTestObject
byl vytvořen pomocí rutiny New-Object
s BasicTest třídy. Výstup ukazuje, že hodnota $BasicTestObject
proměnné je instance BasicTest třídy a že obsahuje člen volaný Multiply
.
Příklad 3: Přidání typů ze sestavení
Tento příklad přidá třídy ze Accessibility.dll
sestavení do aktuální relace.
$AccType = Add-Type -AssemblyName "accessib*" -PassThru
Proměnná $AccType
ukládá objekt vytvořený pomocí rutiny Add-Type
. Add-Type
používá parametr AssemblyName k určení názvu sestavení. Zástupný znak hvězdičky (*
) umožňuje získat správné sestavení, i když si nejste jisti názvem nebo jeho pravopisem. Parametr PassThru generuje objekty, které představují třídy přidané do relace.
Příklad 4: Volání nativních rozhraní API systému Windows
Tento příklad ukazuje, jak volat nativní rozhraní API systému Windows v PowerShellu. Add-Type
používá mechanismus Volání platformy (P/Invoke) k volání funkce z User32.dll
PowerShellu. Tento příklad funguje jenom na počítačích s operačním systémem Windows.
$Signature = @"
[DllImport("user32.dll")]public static extern bool ShowWindowAsync(IntPtr hWnd, int nCmdShow);
"@
$addTypeSplat = @{
MemberDefinition = $Signature
Name = "Win32ShowWindowAsync"
Namespace = 'Win32Functions'
PassThru = $true
}
$ShowWindowAsync = Add-Type @addTypeSplat
# Minimize the PowerShell console
$ShowWindowAsync::ShowWindowAsync((Get-Process -Id $pid).MainWindowHandle, 2)
# Restore the PowerShell console
$ShowWindowAsync::ShowWindowAsync((Get-Process -Id $Pid).MainWindowHandle, 4)
Proměnná $Signature
ukládá podpis ShowWindowAsync
funkce v jazyce C#. Aby se zajistilo, že výsledná metoda je viditelná v relaci PowerShellu, public
bylo klíčové slovo přidáno do standardního podpisu. Další informace naleznete v tématu ShowWindowAsync funkce.
Proměnná $ShowWindowAsync
ukládá objekt vytvořený parametrem Add-Type
PassThru .
Rutina Add-Type
přidá ShowWindowAsync
funkci do relace PowerShellu jako statickou metodu. Příkaz používá Parametr MemberDefinition k určení definice metody uložené v $Signature
proměnné. Příkaz používá parametry Name a Namespace k určení názvu a oboru názvů pro třídu. Parametr PassThru generuje objekt, který představuje typy.
Nová ShowWindowAsync
statická metoda se používá v příkazech k minimalizaci a obnovení konzoly PowerShellu. Metoda má dva parametry: popisovač okna a celé číslo, které určuje způsob zobrazení okna.
Pokud chcete minimalizovat konzolu PowerShellu, ShowWindowAsync
použije rutinu Get-Process
$PID
s automatickou proměnnou k získání procesu hostujícího aktuální relaci PowerShellu. Pak používá MainWindowHandle vlastnost aktuální proces a hodnotu 2
, která představuje SW_MINIMIZE
hodnotu.
Chcete-li okno obnovit, ShowWindowAsync
použije hodnotu 4
pozice okna, která představuje SW_RESTORE
hodnotu.
Chcete-li maximalizovat okno, použijte hodnotu 3
, která představuje SW_MAXIMIZE
.
Příklad 5: Přidání typu ze souboru jazyka Visual Basic
Tento příklad používá rutinu Add-Type
k přidání třídy VBFromFile , která je definována v Hello.vb
souboru do aktuální relace. Text Hello.vb
souboru se zobrazí ve výstupu příkazu.
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
Hello, World
Add-Type
použije parametr Path k určení zdrojového souboru Hello.vb
a přidá typ definovaný v souboru. Funkce SayHello
je volána jako statická metoda třídy VBFromFile .
Příklad 6: Přidání třídy s JScript.NET
Tento příklad používá JScript.NET k vytvoření nové třídy FRectangle v relaci PowerShellu.
Add-Type @'
class FRectangle {
var Length : double;
var Height : double;
function Perimeter() : double {
return (Length + Height) * 2; }
function Area() : double {
return Length * Height; } }
'@ -Language JScript
$rect = [FRectangle]::new()
$rect
Length Height
------ ------
0 0
Příklad 7: Přidání kompilátoru jazyka F#
Tento příklad ukazuje, jak pomocí rutiny Add-Type
přidat kompilátor kódu F# do relace PowerShellu. Pokud chcete tento příklad spustit v PowerShellu, musíte mít FSharp.Compiler.CodeDom.dll
nainstalovaný jazyk F#.
Add-Type -Path "FSharp.Compiler.CodeDom.dll"
$Provider = New-Object Microsoft.FSharp.Compiler.CodeDom.FSharpCodeProvider
$FSharpCode = @"
let rec loop n =if n <= 0 then () else beginprint_endline (string_of_int n);loop (n-1)end
"@
$FSharpType = Add-Type -TypeDefinition $FSharpCode -CodeDomProvider $Provider -PassThru |
Where-Object { $_.IsPublic }
$FSharpType::loop(4)
4
3
2
1
Add-Type
pomocí parametru Path určuje sestavení a získá typy v sestavení.
New-Object
vytvoří instanci zprostředkovatele kódu F# a uloží výsledek do $Provider
proměnné. Proměnná $FSharpCode
uloží kód jazyka F#, který definuje metodu Loop .
Proměnná $FSharpType
ukládá výsledky Add-Type
rutiny, která ukládá veřejné typy definované v $FSharpCode
. Parametr TypeDefinition určuje zdrojový kód, který definuje typy. Parametr CodeDomProvider určuje kompilátor zdrojového kódu. Parametr PassThru směruje Add-Type
na vrácení objektu runtime , který představuje typy.
Objekty se odesílají do Where-Object
rutiny, která vrací pouze veřejné typy. Tato rutina Where-Object
se používá, protože zprostředkovatel F# generuje neveřejné typy pro podporu výsledného veřejného typu.
Metoda Loop je volána jako statická metoda typu uloženého $FSharpType
v proměnné.
Parametry
-AssemblyName
Určuje název sestavení, které obsahuje typy. Add-Type
přebírá typy ze zadaného sestavení. Tento parametr se vyžaduje při vytváření typů na základě názvu sestavení.
Zadejte úplný nebo jednoduchý název sestavení, označovaný také jako částečný název sestavení. V názvu sestavení jsou povoleny zástupné znaky. Pokud zadáte jednoduchý nebo částečný název, Add-Type
přeloží ho na úplný název a pak použije úplný název k načtení sestavení.
Použití parametrů Path nebo LiteralPath zaručuje, že načítáte sestavení, které jste chtěli načíst. Pokud použijete parametr AssemblyName , PowerShell požádá .NET, aby přeložil název sestavení pomocí standardního procesu překladu sestavení .NET. Vzhledem k tomu, že .NET nejprve prohledá složku aplikace, Add-Type
může místo verze v aktuální složce načíst sestavení $PSHOME
. Další informace naleznete v tématu Umístění sestavení.
Pokud se rozhraní .NET nepodaří přeložit název, PowerShell vyhledá sestavení v aktuálním umístění. Při použití zástupných znaků v parametru AssemblyName se proces překladu sestavení .NET nezdaří, což způsobí, že PowerShell bude hledat v aktuálním umístění.
Typ: | String[] |
Aliasy: | AN |
Position: | Named |
Default value: | None |
Vyžadováno: | True |
Přijmout vstup kanálu: | False |
Přijmout zástupné znaky: | True |
-CodeDomProvider
Určuje generátor kódu nebo kompilátor. Add-Type
používá zadaný kompilátor ke kompilaci zdrojového kódu. Výchozí hodnota je kompilátor jazyka C#. Tento parametr použijte, pokud používáte jazyk, který nelze zadat pomocí parametru Language . KódDomProvider, který zadáte, musí být schopen generovat sestavení ze zdrojového kódu.
Typ: | CodeDomProvider |
Aliasy: | Provider |
Position: | Named |
Default value: | C# compiler |
Vyžadováno: | False |
Přijmout vstup kanálu: | False |
Přijmout zástupné znaky: | False |
-CompilerParameters
Určuje možnosti kompilátoru zdrojového kódu. Tyto možnosti se odešlou kompilátoru bez revize.
Tento parametr umožňuje nasměrovat kompilátor tak, aby vygeneroval spustitelný soubor, prostředky pro vložení nebo nastavil možnosti příkazového řádku, jako je tato /unsafe
možnost. Tento parametr implementuje CompilerParameters třídy System.CodeDom.Compiler.CompilerParameters.
Ve stejném příkazu nemůžete použít parametry CompilerParameters a ReferencedAssemblies .
Typ: | CompilerParameters |
Aliasy: | CP |
Position: | Named |
Default value: | None |
Vyžadováno: | False |
Přijmout vstup kanálu: | False |
Přijmout zástupné znaky: | False |
-IgnoreWarnings
Ignoruje upozornění kompilátoru. Tento parametr použijte, pokud chcete zabránit Add-Type
zpracování upozornění kompilátoru jako chyb.
Typ: | SwitchParameter |
Position: | Named |
Default value: | False |
Vyžadováno: | False |
Přijmout vstup kanálu: | False |
Přijmout zástupné znaky: | False |
-Language
Určuje jazyk, který se používá ve zdrojovém kódu. Rutina Add-Type
používá hodnotu tohoto parametru k výběru příslušného CodeDomProvider. CSharp je výchozí hodnota. Přijatelné hodnoty pro tento parametr jsou následující:
CSharp
CSharpVersion2
CSharpVersion3
JScript
VisualBasic
Typ: | Language |
Přípustné hodnoty: | CSharp, CSharpVersion2, CSharpVersion3, JScript, VisualBasic |
Position: | Named |
Default value: | CSharp |
Vyžadováno: | False |
Přijmout vstup kanálu: | False |
Přijmout zástupné znaky: | False |
-LiteralPath
Určuje cestu k souborům zdrojového kódu nebo souborům DLL sestavení, které obsahují typy. Na rozdíl od cesty se hodnota parametru LiteralPath používá přesně tak, jak je zadána. Žádné znaky nejsou interpretovány jako zástupné znaky. Pokud cesta obsahuje řídicí znaky, uzavřete ji do jednoduchých uvozovek. Jednoduché uvozovky říkají PowerShellu, aby nepřekládaly žádné znaky jako řídicí sekvence.
Použití parametrů Path nebo LiteralPath zaručuje, že načítáte sestavení, které jste chtěli načíst.
Typ: | String[] |
Aliasy: | PSPath |
Position: | Named |
Default value: | None |
Vyžadováno: | True |
Přijmout vstup kanálu: | False |
Přijmout zástupné znaky: | False |
-MemberDefinition
Určuje nové vlastnosti nebo metody pro třídu. Add-Type
vygeneruje kód šablony, který je nutný k podpoře vlastností nebo metod.
Ve Windows můžete pomocí této funkce v PowerShellu volat volání nespravovaných funkcí (P/Invoke).
Typ: | String[] |
Position: | 1 |
Default value: | None |
Vyžadováno: | True |
Přijmout vstup kanálu: | False |
Přijmout zástupné znaky: | False |
-Name
Určuje název třídy, která se má vytvořit. Tento parametr se vyžaduje při generování typu z definice člena.
Název typu a obor názvů musí být v rámci relace jedinečný. Typ nelze uvolnit ani ho změnit. Pokud chcete změnit kód pro typ, musíte změnit název nebo spustit novou relaci PowerShellu. Jinak příkaz selže.
Typ: | String |
Position: | 0 |
Default value: | None |
Vyžadováno: | True |
Přijmout vstup kanálu: | False |
Přijmout zástupné znaky: | False |
-Namespace
Určuje obor názvů pro typ.
Pokud tento parametr není součástí příkazu, typ se vytvoří v oboru názvů Microsoft.PowerShell.Commands.AddType.AutoGeneratedTypes . Pokud je parametr součástí příkazu s prázdnou řetězcovou hodnotou nebo hodnotou $Null
, typ se vygeneruje v globálním oboru názvů.
Typ: | String |
Aliasy: | NS |
Position: | Named |
Default value: | None |
Vyžadováno: | False |
Přijmout vstup kanálu: | False |
Přijmout zástupné znaky: | False |
-OutputAssembly
Vygeneruje soubor KNIHOVNY DLL pro sestavení se zadaným názvem v umístění. Zadejte volitelnou cestu a název souboru. Jsou povoleny zástupné znaky. Ve výchozím nastavení Add-Type
generuje sestavení pouze v paměti.
Typ: | String |
Aliasy: | OA |
Position: | Named |
Default value: | None |
Vyžadováno: | False |
Přijmout vstup kanálu: | False |
Přijmout zástupné znaky: | True |
-OutputType
Určuje výstupní typ výstupního sestavení. Ve výchozím nastavení není zadán žádný typ výstupu. Tento parametr je platný pouze v případě, že je v příkazu zadáno výstupní sestavení. Další informace o hodnotách naleznete v tématu OutputAssemblyType – výčet.
Přijatelné hodnoty pro tento parametr jsou následující:
ConsoleApplication
Library
WindowsApplication
Typ: | OutputAssemblyType |
Aliasy: | OT |
Přípustné hodnoty: | ConsoleApplication, Library, WindowsApplication |
Position: | Named |
Default value: | None |
Vyžadováno: | False |
Přijmout vstup kanálu: | False |
Přijmout zástupné znaky: | False |
-PassThru
Vrátí objekt System.Runtime, který představuje přidané typy. Ve výchozím nastavení tato rutina negeneruje žádný výstup.
Typ: | SwitchParameter |
Position: | Named |
Default value: | False |
Vyžadováno: | False |
Přijmout vstup kanálu: | False |
Přijmout zástupné znaky: | False |
-Path
Určuje cestu k souborům zdrojového kódu nebo souborům DLL sestavení, které obsahují typy.
Pokud odesíláte soubory zdrojového kódu, Add-Type
zkompiluje kód v souborech a vytvoří sestavení typů v paměti. Přípona souboru zadaná v hodnotě Path určuje kompilátor, který Add-Type
používá.
Pokud odešlete soubor sestavení, Add-Type
vezme typy ze sestavení. Chcete-li zadat sestavení v paměti nebo globální mezipaměť sestavení, použijte parametr AssemblyName .
Typ: | String[] |
Position: | 0 |
Default value: | None |
Vyžadováno: | True |
Přijmout vstup kanálu: | False |
Přijmout zástupné znaky: | False |
-ReferencedAssemblies
Určuje sestavení, na kterých typ závisí. Ve výchozím nastavení Add-Type
odkazy System.dll
a System.Management.Automation.dll
. Sestavení, která zadáte pomocí tohoto parametru, se kromě výchozích sestavení odkazují.
Ve stejném příkazu nemůžete použít parametry CompilerParameters a ReferencedAssemblies .
Typ: | String[] |
Aliasy: | RA |
Position: | Named |
Default value: | None |
Vyžadováno: | False |
Přijmout vstup kanálu: | False |
Přijmout zástupné znaky: | False |
-TypeDefinition
Určuje zdrojový kód, který obsahuje definice typu. Zadejte zdrojový kód do řetězce nebo řetězce sem nebo zadejte proměnnou, která obsahuje zdrojový kód. Další informace o tomto řetězci najdete v tématu about_Quoting_Rules.
Do definice typu zahrňte deklaraci oboru názvů. Pokud deklaraci oboru názvů vynecháte, může mít váš typ stejný název jako jiný typ nebo zástupce jiného typu, což způsobí neúmyslné přepsání. Pokud například definujete typ s názvem Výjimka, skripty, které jako zástupce pro System.Exception používají výjimku, selžou.
Typ: | String |
Position: | 0 |
Default value: | None |
Vyžadováno: | True |
Přijmout vstup kanálu: | False |
Přijmout zástupné znaky: | False |
-UsingNamespace
Určuje další obory názvů, které jsou požadovány pro třídu. To se podobá klíčovému slovu jazyka C#. Using
Ve výchozím nastavení Add-Type
odkazuje na systémový obor názvů. Pokud se použije parametr MemberDefinition, Add-Type
odkazuje ve výchozím nastavení také na obor názvů System.Runtime.InteropServices. Obory názvů, které přidáte pomocí parametru UsingNamespace , se kromě výchozích oborů názvů odkazují.
Typ: | String[] |
Aliasy: | Using |
Position: | Named |
Default value: | System namespace |
Vyžadováno: | False |
Přijmout vstup kanálu: | False |
Přijmout zástupné znaky: | False |
Vstupy
None
Do této rutiny nemůžete roušit objekty.
Výstupy
None
Ve výchozím nastavení tato rutina nevrací žádný výstup.
Pokud použijete parametr PassThru , tato rutina vrátí objekt System.Type představující nový typ.
Poznámky
Typy, které přidáte, existují pouze v aktuální relaci. Pokud chcete použít typy ve všech relacích, přidejte je do profilu PowerShellu. Další informace o profilu najdete v tématu about_Profiles.
Názvy typů a obory názvů musí být v rámci relace jedinečné. Typ nelze uvolnit ani ho změnit. Pokud potřebujete změnit kód pro typ, musíte změnit název nebo spustit novou relaci PowerShellu. Jinak příkaz selže.
Třída CodeDomProvider pro některé jazyky, jako je IronPython a J#, negeneruje výstup. V důsledku toho nelze použít Add-Type
typy napsané v těchto jazycích .
Tato rutina je založená na třídě CodeDomProvider rozhraní Microsoft .NET Framework.