Add-Type
Lägger till en Microsoft .NET-klass i en PowerShell-session.
Syntax
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>]
Description
Med Add-Type
cmdleten kan du definiera en Microsoft .NET Core-klass i din PowerShell-session. Du kan sedan instansiera objekt med hjälp av cmdleten New-Object
och använda objekten på samma sätt som med alla .NET Core-objekt. Om du lägger till ett Add-Type
kommando i din PowerShell-profil är klassen tillgänglig i alla PowerShell-sessioner.
Du kan ange typen genom att ange en befintlig sammansättning eller källkodsfiler, eller så kan du ange källkoden infogad eller sparad i en variabel. Du kan till och med bara ange en metod och Add-Type
definiera och generera klassen. I Windows kan du använda den här funktionen för att göra P/Invoke-anrop (Platform Invoke) till ohanterade funktioner i PowerShell. Om du anger källkod Add-Type
kompilerar du den angivna källkoden och genererar en minnesintern sammansättning som innehåller de nya .NET Core-typerna.
Du kan använda parametrarna Add-Type
för för att ange ett alternativt språk och kompilator, C# är standard, kompilatoralternativ, sammansättningsberoenden, klassnamnområdet, namnen på typen och den resulterande sammansättningen.
Från och med PowerShell 7 Add-Type
kompilerar inte en typ om det redan finns en typ med samma namn. Add-Type
Söker också efter sammansättningar i en ref
mapp under mappen som innehåller pwsh.dll
.
Exempel
Exempel 1: Lägg till en .NET-typ i en session
Det här exemplet lägger till klassen BasicTest i sessionen genom att ange källkod som lagras i en variabel. Klassen BasicTest används för att lägga till heltal, skapa ett objekt och multiplicera heltal.
$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)
Variabeln $Source
lagrar källkoden för klassen. Typen har en statisk metod som heter Add
och en icke-statisk metod med namnet Multiply
.
Cmdleten Add-Type
lägger till klassen i sessionen. Eftersom det använder infogad källkod använder kommandot parametern TypeDefinition för att ange koden i variabeln $Source
.
Den Add
statiska metoden för klassen BasicTest använder dubbelkolontecken (::
) för att ange en statisk medlem i klassen. Heltalen läggs till och summan visas.
Cmdleten New-Object
instansierar en instans av klassen BasicTest . Det sparar det nya objektet i variabeln $BasicTestObject
.
$BasicTestObject
Multiply
använder metoden. Heltalen multipliceras och produkten visas.
Exempel 2: Undersök en tillagd typ
I det här exemplet används cmdleten Get-Member
för att undersöka de objekt som Add-Type
cmdletarna och New-Object
skapade i exempel 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()
Cmdleten Get-Member
hämtar typen och medlemmarna i klassen BasicTest som Add-Type
har lagts till i sessionen. Kommandot Get-Member
visar att det är ett System.RuntimeType-objekt som härleds från klassen System.Object .
Parametern Get-Member
Static hämtar statiska egenskaper och metoder för klassen BasicTest . Utdata visar att Add
metoden ingår.
Cmdleten Get-Member
hämtar medlemmarna i objektet som lagras i variabeln $BasicTestObject
.
$BasicTestObject
skapades med hjälp av cmdleten New-Object
med klassen BasicTest . Utdata visar att värdet för variabeln $BasicTestObject
är en instans av klassen BasicTest och att den innehåller en medlem med namnet Multiply
.
Exempel 3: Lägga till typer från en sammansättning
I det här exemplet läggs klasserna från JsonSchema.NET.dll
sammansättningen till den aktuella sessionen.
Set-Location -Path $PSHOME
$AccType = Add-Type -AssemblyName *jsonschema* -PassThru
Set-Location
använder parametern Path för att ange variabeln $PSHOME
. Variabeln refererar till PowerShell-installationskatalogen där DLL-filen finns.
Variabeln $AccType
lagrar ett objekt som skapats med cmdleten Add-Type
. Add-Type
använder parametern AssemblyName för att ange namnet på sammansättningen. Med jokertecknet asterisk (*
) kan du få rätt sammansättning även om du inte är säker på namnet eller stavningen. Parametern PassThru genererar objekt som representerar de klasser som läggs till i sessionen.
Exempel 4: Anropa interna Windows-API:er
Det här exemplet visar hur du anropar interna Windows-API:er i PowerShell. Add-Type
använder mekanismen Platform Invoke (P/Invoke) för att anropa en funktion från User32.dll
PowerShell. Det här exemplet fungerar bara på datorer som kör Windows-operativsystemet.
$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)
Variabeln $Signature
lagrar funktionens C#-signatur ShowWindowAsync
. För att säkerställa att den resulterande metoden visas i en PowerShell-session lades nyckelordet public
till i standardsignaturen. Mer information finns i Funktionen ShowWindowAsync .
Variabeln $ShowWindowAsync
lagrar objektet som skapats av parametern Add-Type
PassThru .
Cmdleten Add-Type
ShowWindowAsync
lägger till funktionen i PowerShell-sessionen som en statisk metod. Kommandot använder parametern MemberDefinition för att ange den metoddefinition som sparats i variabeln $Signature
. Kommandot använder parametrarna Namn och Namnområde för att ange ett namn och namnområde för klassen. Parametern PassThru genererar ett objekt som representerar typerna.
Den nya ShowWindowAsync
statiska metoden används i kommandona för att minimera och återställa PowerShell-konsolen. Metoden tar två parametrar: fönsterhandtaget och ett heltal som anger hur fönstret visas.
För att minimera PowerShell-konsolen ShowWindowAsync
använder du cmdleten Get-Process
med den $PID
automatiska variabeln för att hämta den process som är värd för den aktuella PowerShell-sessionen. Sedan använder den egenskapen MainWindowHandle för den aktuella processen och värdet 2
, som representerar SW_MINIMIZE
värdet.
För att återställa fönstret ShowWindowAsync
använder du värdet 4
för för fönsterpositionen SW_RESTORE
, som representerar värdet.
Om du vill maximera fönstret använder du värdet 3
för som representerar SW_MAXIMIZE
.
Parametrar
-AssemblyName
Anger namnet på en sammansättning som innehåller typerna. Add-Type
tar typerna från den angivna sammansättningen. Den här parametern krävs när du skapar typer baserat på ett sammansättningsnamn.
Ange det fullständiga eller enkla namnet, även kallat partiellt namn, för en sammansättning. Jokertecken tillåts i sammansättningsnamnet. Om du anger ett enkelt eller partiellt namn Add-Type
löser du det till det fullständiga namnet och använder sedan det fullständiga namnet för att läsa in sammansättningen.
Om du använder parametrarna Path eller LiteralPath ser du till att du läser in den sammansättning som du avsåg att läsa in. När du använder parametern AssemblyName ber PowerShell .NET att matcha sammansättningsnamnet med hjälp av standardlösningsprocessen för .NET-sammansättning. Eftersom .NET söker i programmappen först Add-Type
kan en sammansättning läsas in från $PSHOME
i stället för versionen i den aktuella mappen. Mer information finns i Sammansättningsplats.
Om .NET inte kan matcha namnet letar PowerShell efter sammansättningen på den aktuella platsen. När du använder jokertecken i parametern AssemblyName misslyckas .NET-sammansättningsmatchningsprocessen, vilket gör att PowerShell söker på den aktuella platsen.
Typ: | String[] |
Alias: | AN |
Position: | Named |
Standardvärde: | None |
Obligatorisk: | True |
Godkänn pipeline-indata: | False |
Godkänn jokertecken: | True |
-CompilerOptions
Anger alternativen för källkodskompilatorn. Dessa alternativ skickas till kompilatorn utan revision.
Med den här parametern kan du dirigera kompilatorn att generera en körbar fil, bädda in resurser eller ange kommandoradsalternativ, till exempel alternativet /unsafe
.
Typ: | String[] |
Position: | Named |
Standardvärde: | None |
Obligatorisk: | False |
Godkänn pipeline-indata: | False |
Godkänn jokertecken: | False |
-IgnoreWarnings
Ignorerar kompilatorvarningar. Använd den här parametern för att förhindra Add-Type
att kompilatorvarningar hanteras som fel.
Typ: | SwitchParameter |
Position: | Named |
Standardvärde: | False |
Obligatorisk: | False |
Godkänn pipeline-indata: | False |
Godkänn jokertecken: | False |
-Language
Anger det språk som används i källkoden. Det acceptabla värdet för den här parametern är CSharp
.
Typ: | Language |
Godkända värden: | CSharp |
Position: | Named |
Standardvärde: | CSharp |
Obligatorisk: | False |
Godkänn pipeline-indata: | False |
Godkänn jokertecken: | False |
-LiteralPath
Anger sökvägen till källkodsfiler eller sammansättnings-DLL-filer som innehåller typerna. Till skillnad från Path används värdet för parametern LiteralPath precis som det skrivs. Inga tecken tolkas som jokertecken. Om sökvägen innehåller escape-tecken omger du den med enkla citattecken. Enkla citattecken gör att PowerShell inte tolkar några tecken som escape-sekvenser.
Om du använder parametrarna Path eller LiteralPath ser du till att du läser in den sammansättning som du avsåg att läsa in.
Typ: | String[] |
Alias: | PSPath, LP |
Position: | Named |
Standardvärde: | None |
Obligatorisk: | True |
Godkänn pipeline-indata: | False |
Godkänn jokertecken: | False |
-MemberDefinition
Anger nya egenskaper eller metoder för klassen. Add-Type
genererar den mallkod som krävs för att stödja egenskaperna eller metoderna.
I Windows kan du använda den här funktionen för att göra P/Invoke-anrop (Platform Invoke) till ohanterade funktioner i PowerShell.
Typ: | String[] |
Position: | 1 |
Standardvärde: | None |
Obligatorisk: | True |
Godkänn pipeline-indata: | False |
Godkänn jokertecken: | False |
-Name
Anger namnet på den klass som ska skapas. Den här parametern krävs när du genererar en typ från en medlemsdefinition.
Typnamnet och namnområdet måste vara unika i en session. Du kan inte ta bort en typ eller ändra den. Om du vill ändra koden för en typ måste du ändra namnet eller starta en ny PowerShell-session. Annars misslyckas kommandot.
Typ: | String |
Position: | 0 |
Standardvärde: | None |
Obligatorisk: | True |
Godkänn pipeline-indata: | False |
Godkänn jokertecken: | False |
-Namespace
Anger ett namnområde för typen.
Om den här parametern inte ingår i kommandot skapas typen i namnområdet Microsoft.PowerShell.Commands.AddType.AutoGeneratedTypes . Om parametern ingår i kommandot med ett tomt strängvärde eller ett värde av $Null
genereras typen i det globala namnområdet.
Typ: | String |
Alias: | NS |
Position: | Named |
Standardvärde: | None |
Obligatorisk: | False |
Godkänn pipeline-indata: | False |
Godkänn jokertecken: | False |
-OutputAssembly
Genererar en DLL-fil för sammansättningen med det angivna namnet på platsen. Ange en valfri sökväg och filnamn. Jokertecken tillåts. Som standard Add-Type
genererar sammansättningen endast i minnet.
Typ: | String |
Alias: | OA |
Position: | Named |
Standardvärde: | None |
Obligatorisk: | False |
Godkänn pipeline-indata: | False |
Godkänn jokertecken: | True |
-OutputType
Anger utdatatypen för utdatasammansättningen. Som standard anges ingen utdatatyp. Den här parametern är endast giltig när en utdatasammansättning anges i kommandot . Mer information om värdena finns i OutputAssemblyType Enumeration.
Godkända värden för den här parametern är följande:
ConsoleApplication
Library
WindowsApplication
Viktigt!
Från och med PowerShell 7.1 ConsoleApplication
, och WindowsApplication
stöds inte och PowerShell genererar ett avslutande fel om någon av dem anges som värden för OutputType-parametern .
Typ: | OutputAssemblyType |
Alias: | OT |
Godkända värden: | ConsoleApplication, Library, WindowsApplication |
Position: | Named |
Standardvärde: | None |
Obligatorisk: | False |
Godkänn pipeline-indata: | False |
Godkänn jokertecken: | False |
-PassThru
Returnerar ett System.Runtime-objekt som representerar de typer som har lagts till. Som standard genererar den här cmdleten inga utdata.
Typ: | SwitchParameter |
Position: | Named |
Standardvärde: | False |
Obligatorisk: | False |
Godkänn pipeline-indata: | False |
Godkänn jokertecken: | False |
-Path
Anger sökvägen till källkodsfiler eller sammansättnings-DLL-filer som innehåller typerna.
Om du skickar källkodsfiler Add-Type
kompilerar du koden i filerna och skapar en minnesintern sammansättning av typerna. Filtillägget som anges i värdet för Path avgör vilken kompilator som Add-Type
använder.
Om du använder parametrarna Path eller LiteralPath ser du till att du läser in den sammansättning som du avsåg att läsa in.
Typ: | String[] |
Position: | 0 |
Standardvärde: | None |
Obligatorisk: | True |
Godkänn pipeline-indata: | False |
Godkänn jokertecken: | False |
-ReferencedAssemblies
Anger de sammansättningar som typen är beroende av. Som standard Add-Type
referenser System.dll
och System.Management.Automation.dll
. De sammansättningar som du anger med hjälp av den här parametern refereras utöver standardsammansättningarna.
Från och med PowerShell 6 innehåller ReferencedAssemblies inte standardsammansättningarna för .NET. Du måste inkludera en specifik referens till dem i värdet som skickas till den här parametern.
Typ: | String[] |
Alias: | RA |
Position: | Named |
Standardvärde: | None |
Obligatorisk: | False |
Godkänn pipeline-indata: | False |
Godkänn jokertecken: | False |
-TypeDefinition
Anger källkoden som innehåller typdefinitionerna. Ange källkoden i en sträng eller här-sträng, eller ange en variabel som innehåller källkoden. Mer information om här-strängar finns i about_Quoting_Rules.
Inkludera en namnområdesdeklaration i din typdefinition. Om du utelämnar namnområdesdeklarationen kan din typ ha samma namn som en annan typ eller genvägen för en annan typ, vilket orsakar en oavsiktlig överskrivning. Om du till exempel definierar en typ med namnet Undantag misslyckas skript som använder Undantag som genväg för System.Exception .
Typ: | String |
Position: | 0 |
Standardvärde: | None |
Obligatorisk: | True |
Godkänn pipeline-indata: | False |
Godkänn jokertecken: | False |
-UsingNamespace
Anger andra namnområden som krävs för klassen. Det här liknar nyckelordet C# , Using
.
Som standard Add-Type
refererar till systemnamnområdet . När parametern MemberDefinition används Add-Type
refererar även namnområdet System.Runtime.InteropServices som standard. De namnområden som du lägger till med hjälp av parametern UsingNamespace refereras utöver standardnamnrymderna.
Typ: | String[] |
Alias: | Using |
Position: | Named |
Standardvärde: | System namespace |
Obligatorisk: | False |
Godkänn pipeline-indata: | False |
Godkänn jokertecken: | False |
Indata
None
Du kan inte skicka objekt till den här cmdleten.
Utdata
None
Som standard returnerar den här cmdleten inga utdata.
När du använder parametern PassThru returnerar den här cmdleten ett System.Type-objekt som representerar den nya typen.
Kommentarer
De typer som du lägger till finns bara i den aktuella sessionen. Om du vill använda typerna i alla sessioner lägger du till dem i din PowerShell-profil. Mer information om profilen finns i about_Profiles.
Typnamn och namnområden måste vara unika i en session. Du kan inte ta bort en typ eller ändra den. Om du behöver ändra koden för en typ måste du ändra namnet eller starta en ny PowerShell-session. Annars misslyckas kommandot.
I Windows PowerShell (version 5.1 och senare) måste du använda Add-Type
för allt som inte redan har lästs in. Oftast gäller detta för sammansättningar som finns i den globala sammansättningscachen (GAC).
I PowerShell 6 och senare finns det ingen GAC, så PowerShell installerar sina egna sammansättningar i $PSHOME
.
Dessa sammansättningar läses in automatiskt vid begäran, så du behöver inte använda Add-Type
dem för att läsa in dem. Det är dock fortfarande tillåtet att använda Add-Type
för att tillåta att skript är implicit kompatibla med alla versioner av PowerShell.
Sammansättningar i GAC kan läsas in efter typnamn i stället för sökväg. Inläsning av sammansättningar från en godtycklig sökväg kräver Add-Type
, eftersom dessa sammansättningar inte kan läsas in automatiskt.