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 PowerShell-sessionen. Du kan sedan instansiera objekt med hjälp av cmdleten New-Object och använda objekten på samma sätt som för 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 även ange endast en metod och Add-Type definierar och genererar 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 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 en 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 med namnet Add och en icke-statisk metod med namnet Multiply.

Cmdleten Add-Type lägger till klassen i sessionen. Eftersom den använder infogad källkod använder kommandot parametern TypeDefinition för att ange koden i variabeln $Source .

Den Add statiska metoden i 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 .

$BasicTestObjectMultiply 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 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-MemberStatic 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ägg till typer från en sammansättning

Det här exemplet lägger till klasserna från NJsonSchema.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 Installationskatalogen för PowerShell 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);
"@

$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)

Variabeln $Signature lagrar funktionens ShowWindowAsync C#-signatur. 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 skapades av parametern Add-TypePassThru . Cmdleten Add-TypeShowWindowAsync 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 cmdleten Get-Process med den $PID automatiska variabeln för att hämta processen som är värd för den aktuella PowerShell-sessionen. Sedan används egenskapen MainWindowHandle för den aktuella processen och värdet 2, som representerar SW_MINIMIZE värdet.

Om du vill återställa fönstret ShowWindowAsync använder du värdet 4 för för fönsterpositionen, som representerar värdet SW_RESTORE .

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 matchas det med det fullständiga namnet och använder sedan det fullständiga namnet för att läsa in sammansättningen.

Den här parametern accepterar inte en sökväg eller ett filnamn. Om du vill ange sökvägen till sammansättningens DLL-fil (Dynamic Link Library) använder du parametern Sökväg .

Type:String[]
Aliases:AN
Position:Named
Default value:None
Accept pipeline input:False
Accept wildcard characters: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 /unsafe alternativet .

Du kan inte använda parametrarna CompilerOptions och ReferencedAssemblies i samma kommando.

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

-IgnoreWarnings

Ignorerar kompilatorvarningar. Använd den här parametern för att förhindra Add-Type att kompilatorvarningar hanteras som fel.

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

-Language

Anger det språk som används i källkoden. Det godkända värdet för den här parametern är

  • CSharp
Type:Language
Accepted values:CSharp
Position:Named
Default value:CSharp
Accept pipeline input:False
Accept wildcard characters: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 exakt som det skrivs. Inga tecken tolkas som jokertecken. Om sökvägen innehåller escape-tecken omger du den inom enkla citattecken. Enkla citattecken säger till PowerShell att inte tolka några tecken som escape-sekvenser.

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

-MemberDefinition

Anger nya egenskaper eller metoder för klassen. Add-Type genererar den mallkod som krävs för att stödja egenskaper eller metoder.

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.

Type:String[]
Position:1
Default value:None
Accept pipeline input:False
Accept wildcard characters: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.

Type:String
Position:0
Default value:None
Accept pipeline input:False
Accept wildcard characters: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 $Nullgenereras typen i det globala namnområdet.

Type:String
Aliases:NS
Position:Named
Default value:None
Accept pipeline input:False
Accept wildcard characters: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.

Type:String
Aliases:OA
Position:Named
Default value:None
Accept pipeline input:False
Accept wildcard characters: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 utlöser ett avslutande fel om någon av dem anges som värden för outputtype-parametern .

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

-PassThru

Returnerar ett System.Runtime-objekt som representerar de typer som har lagts till. Som standard genererar den här cmdleten inga utdata.

Type:SwitchParameter
Position:Named
Default value:False
Accept pipeline input:False
Accept wildcard characters: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. Filnamnstillägget som anges i värdet för Sökväg avgör vilken kompilator som Add-Type använder.

Om du skickar en sammansättningsfil Add-Type tar du typerna från sammansättningen. Om du vill ange en minnesintern sammansättning eller global sammansättningscache använder du parametern AssemblyName .

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

-ReferencedAssemblies

Anger de sammansättningar som typen är beroende av. Som standard Add-Type refererar referenser och System.dllSystem.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.

Du kan inte använda parametrarna CompilerOptions och ReferencedAssemblies i samma kommando.

Type:String[]
Aliases:RA
Position:Named
Default value:None
Accept pipeline input:False
Accept wildcard characters: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 .

Type:String
Position:0
Default value:None
Accept pipeline input:False
Accept wildcard characters: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.

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

Indata

None

Du kan inte skicka objekt i pipelinen till Add-Type.

Utdata

None or System.Type

När du använder parametern Add-TypePassThru returnerar ett System.Type-objekt som representerar den nya typen. Annars genererar denna cmdlet inga utdata.

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 inom 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.