Add-Type
Voegt een Microsoft .NET-klasse toe aan een PowerShell-sessie.
Syntaxis
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
Met de Add-Type
cmdlet kunt u een Microsoft .NET Core-klasse definiëren in uw PowerShell-sessie. U kunt vervolgens objecten instantiëren met behulp van de New-Object
cmdlet en de objecten gebruiken, net zoals u elk .NET Core-object zou gebruiken. Als u een Add-Type
opdracht aan uw PowerShell-profiel toevoegt, is de klasse beschikbaar in alle PowerShell-sessies.
U kunt het type opgeven door een bestaande assembly- of broncodebestanden op te geven, of u kunt de broncode inline opgeven of opslaan in een variabele. U kunt zelfs alleen een methode opgeven en Add-Type
de klasse definiëren en genereren. In Windows kunt u deze functie gebruiken om P/Invoke-aanroepen (Platform Invoke) te maken naar niet-beheerde functies in PowerShell. Als u broncode opgeeft, Add-Type
compileert u de opgegeven broncode en genereert u een assembly in het geheugen die de nieuwe .NET Core-typen bevat.
U kunt de parameters gebruiken om Add-Type
een alternatieve taal en compiler op te geven. C# is de standaardinstelling, compileropties, assembly-afhankelijkheden, de klassenaamruimte, de namen van het type en de resulterende assembly.
Vanaf PowerShell 7 Add-Type
compileert u geen type als er al een type met dezelfde naam bestaat. Add-Type
Zoekt ook naar assembly's in een ref
map onder de map die bevatpwsh.dll
.
Voorbeelden
Voorbeeld 1: Een .NET-type toevoegen aan een sessie
In dit voorbeeld wordt de BasicTest-klasse toegevoegd aan de sessie door broncode op te geven die is opgeslagen in een variabele. De klasse BasicTest wordt gebruikt om gehele getallen toe te voegen, een object te maken en gehele getallen te vermenigvuldigen.
$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)
De $Source
variabele slaat de broncode voor de klasse op. Het type heeft een statische methode aangeroepen Add
en een niet-statische methode met de naam Multiply
.
De Add-Type
cmdlet voegt de klasse toe aan de sessie. Omdat deze inlinebroncode gebruikt, gebruikt de opdracht de parameter TypeDefinition om de code in de $Source
variabele op te geven.
De Add
statische methode van de klasse BasicTest gebruikt de dubbele dubbele punttekens (::
) om een statisch lid van de klasse op te geven. De gehele getallen worden toegevoegd en de som wordt weergegeven.
Met New-Object
de cmdlet wordt een exemplaar van de klasse BasicTest geïnstitueert. Het nieuwe object wordt opgeslagen in de $BasicTestObject
variabele.
$BasicTestObject
gebruikt de Multiply
methode. De gehele getallen worden vermenigvuldigd en het product wordt weergegeven.
Voorbeeld 2: Een toegevoegd type onderzoeken
In dit voorbeeld wordt de Get-Member
cmdlet gebruikt om de objecten te onderzoeken die door de Add-Type
en New-Object
cmdlets zijn gemaakt in voorbeeld 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()
De Get-Member
cmdlet haalt het type en de leden van de BasicTest-klasse op die Add-Type
aan de sessie is toegevoegd. De Get-Member
opdracht geeft aan dat het een System.RuntimeType-object is dat is afgeleid van de klasse System.Object .
De Get-Member
statische parameter haalt de statische eigenschappen en methoden van de klasse BasicTest op. In de uitvoer ziet u dat de Add
methode is opgenomen.
De Get-Member
cmdlet haalt de leden op van het object dat is opgeslagen in de $BasicTestObject
variabele.
$BasicTestObject
is gemaakt met behulp van de New-Object
cmdlet met de Klasse BasicTest . De uitvoer laat zien dat de waarde van de $BasicTestObject
variabele een exemplaar is van de klasse BasicTest en dat deze een lid bevat met de naam Multiply
.
Voorbeeld 3: Typen toevoegen vanuit een assembly
In dit voorbeeld worden de klassen van de JsonSchema.NET.dll
assembly toegevoegd aan de huidige sessie.
Set-Location -Path $PSHOME
$AccType = Add-Type -AssemblyName *jsonschema* -PassThru
Set-Location
gebruikt de parameter Path om de $PSHOME
variabele op te geven. De variabele verwijst naar de Installatiemap van PowerShell waar het DLL-bestand zich bevindt.
In $AccType
de variabele wordt een object opgeslagen dat is gemaakt met de Add-Type
cmdlet. Add-Type
gebruikt de parameter AssemblyName om de naam van de assembly op te geven. Met het jokerteken sterretje (*
) kunt u de juiste assembly krijgen, zelfs wanneer u niet zeker weet of de naam of de spelling is. Met de parameter PassThru worden objecten gegenereerd die de klassen vertegenwoordigen die aan de sessie worden toegevoegd.
Voorbeeld 4: Systeemeigen Windows-API's aanroepen
In dit voorbeeld ziet u hoe u systeemeigen Windows-API's aanroept in PowerShell. Add-Type
maakt gebruik van het mechanisme Platform Invoke (P/Invoke) om een functie aan User32.dll
te roepen vanuit PowerShell. Dit voorbeeld werkt alleen op computers met het Windows-besturingssysteem.
$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)
De $Signature
variabele slaat de C#-handtekening van de ShowWindowAsync
functie op. Om ervoor te zorgen dat de resulterende methode zichtbaar is in een PowerShell-sessie, is het public
trefwoord toegevoegd aan de standaardhandtekening. Zie de functie ShowWindowAsync voor meer informatie.
De $ShowWindowAsync
variabele slaat het object op dat is gemaakt met de Add-Type
parameter PassThru .
De Add-Type
cmdlet voegt de ShowWindowAsync
functie als statische methode toe aan de PowerShell-sessie. De opdracht maakt gebruik van de parameter MemberDefinition om de methodedefinitie op te geven die is opgeslagen in de $Signature
variabele. De opdracht gebruikt de parameters Naam en Naamruimte om een naam en naamruimte voor de klasse op te geven. Met de parameter PassThru wordt een object gegenereerd dat de typen vertegenwoordigt.
De nieuwe ShowWindowAsync
statische methode wordt gebruikt in de opdrachten om de PowerShell-console te minimaliseren en te herstellen. De methode gebruikt twee parameters: de venstergreep en een geheel getal dat aangeeft hoe het venster wordt weergegeven.
Als u de PowerShell-console wilt minimaliseren, ShowWindowAsync
gebruikt u de Get-Process
cmdlet met de $PID
automatische variabele om het proces op te halen dat als host fungeert voor de huidige PowerShell-sessie. Vervolgens wordt de eigenschap MainWindowHandle van het huidige proces en een waarde van 2
, die de SW_MINIMIZE
waarde vertegenwoordigt, gebruikt.
Als u het venster wilt herstellen, ShowWindowAsync
gebruikt u een waarde voor de positie van 4
het venster, die de SW_RESTORE
waarde vertegenwoordigt.
Gebruik de waarde van 3
dat venster om het venster te maximaliseren SW_MAXIMIZE
.
Parameters
-AssemblyName
Hiermee geeft u de naam van een assembly die de typen bevat. Add-Type
neemt de typen van de opgegeven assembly. Deze parameter is vereist wanneer u typen maakt op basis van een assemblynaam.
Voer de volledige of eenvoudige naam in, ook wel de gedeeltelijke naam genoemd, van een assembly. Jokertekens zijn toegestaan in de assemblynaam. Als u een eenvoudige of gedeeltelijke naam invoert, Add-Type
wordt deze omgezet in de volledige naam en wordt vervolgens de volledige naam gebruikt om de assembly te laden.
Als u de path - of LiteralPath-parameters gebruikt, wordt gegarandeerd dat u de assembly laadt die u wilt laden. Wanneer u de parameter AssemblyName gebruikt, vraagt PowerShell .NET om de assemblynaam op te lossen met behulp van het standaard .NET assembly-resolutieproces. Aangezien .NET eerst in de toepassingsmap zoekt, Add-Type
kan een assembly worden geladen uit $PSHOME
in plaats van de versie in de huidige map. Zie Assembly-locatie voor meer informatie.
Als .NET de naam niet kan worden omgezet, zoekt PowerShell op de huidige locatie naar de assembly. Wanneer u jokertekens gebruikt in de parameter AssemblyName , mislukt het .NET assembly-oplossingsproces waardoor PowerShell op de huidige locatie kan zoeken.
Type: | String[] |
Aliassen: | AN |
Position: | Named |
Default value: | None |
Vereist: | True |
Pijplijninvoer accepteren: | False |
Jokertekens accepteren: | True |
-CompilerOptions
Hiermee geeft u de opties voor de broncode compiler. Deze opties worden zonder revisie naar de compiler verzonden.
Met deze parameter kunt u de compiler omsturen om een uitvoerbaar bestand te genereren, resources in te sluiten of opdrachtregelopties in te stellen, zoals de /unsafe
optie.
Type: | String[] |
Position: | Named |
Default value: | None |
Vereist: | False |
Pijplijninvoer accepteren: | False |
Jokertekens accepteren: | False |
-IgnoreWarnings
Hiermee worden compilerwaarschuwingen genegeerd. Gebruik deze parameter om te voorkomen dat Add-Type
compilerwaarschuwingen als fouten worden verwerkt.
Type: | SwitchParameter |
Position: | Named |
Default value: | False |
Vereist: | False |
Pijplijninvoer accepteren: | False |
Jokertekens accepteren: | False |
-Language
Hiermee geeft u de taal op die wordt gebruikt in de broncode. De acceptabele waarde voor deze parameter is CSharp
.
Type: | Language |
Geaccepteerde waarden: | CSharp |
Position: | Named |
Default value: | CSharp |
Vereist: | False |
Pijplijninvoer accepteren: | False |
Jokertekens accepteren: | False |
-LiteralPath
Hiermee geeft u het pad naar broncodebestanden of ASSEMBLY DLL-bestanden die de typen bevatten. In tegenstelling tot Path wordt de waarde van de Parameter LiteralPath precies gebruikt zoals deze is getypt. Er worden geen tekens geïnterpreteerd als jokertekens. Als het pad escapetekens bevat, plaatst u het tussen enkele aanhalingstekens. Enkele aanhalingstekens geven PowerShell aan dat er geen tekens als escapereeksen moeten worden geïnterpreteerd.
Als u de path - of LiteralPath-parameters gebruikt, wordt gegarandeerd dat u de assembly laadt die u wilt laden.
Type: | String[] |
Aliassen: | PSPath, LP |
Position: | Named |
Default value: | None |
Vereist: | True |
Pijplijninvoer accepteren: | False |
Jokertekens accepteren: | False |
-MemberDefinition
Hiermee geeft u nieuwe eigenschappen of methoden voor de klasse. Add-Type
genereert de sjablooncode die vereist is om de eigenschappen of methoden te ondersteunen.
In Windows kunt u deze functie gebruiken om P/Invoke-aanroepen (Platform Invoke) te maken naar niet-beheerde functies in PowerShell.
Type: | String[] |
Position: | 1 |
Default value: | None |
Vereist: | True |
Pijplijninvoer accepteren: | False |
Jokertekens accepteren: | False |
-Name
Hiermee geeft u de naam van de klasse die moet worden gemaakt. Deze parameter is vereist bij het genereren van een type van een liddefinitie.
De typenaam en naamruimte moeten uniek zijn binnen een sessie. U kunt een type niet verwijderen of wijzigen. Als u de code voor een type wilt wijzigen, moet u de naam wijzigen of een nieuwe PowerShell-sessie starten. Anders mislukt de opdracht.
Type: | String |
Position: | 0 |
Default value: | None |
Vereist: | True |
Pijplijninvoer accepteren: | False |
Jokertekens accepteren: | False |
-Namespace
Hiermee geeft u een naamruimte voor het type.
Als deze parameter niet is opgenomen in de opdracht, wordt het type gemaakt in de naamruimte Microsoft.PowerShell.Commands.AddType.AutoGeneratedTypes . Als de parameter is opgenomen in de opdracht met een lege tekenreekswaarde of een waarde van $Null
, wordt het type gegenereerd in de globale naamruimte.
Type: | String |
Aliassen: | NS |
Position: | Named |
Default value: | None |
Vereist: | False |
Pijplijninvoer accepteren: | False |
Jokertekens accepteren: | False |
-OutputAssembly
Genereert een DLL-bestand voor de assembly met de opgegeven naam op de locatie. Voer een optioneel pad en bestandsnaam in. Jokertekens zijn toegestaan. Add-Type
Standaard wordt de assembly alleen in het geheugen gegenereerd.
Type: | String |
Aliassen: | OA |
Position: | Named |
Default value: | None |
Vereist: | False |
Pijplijninvoer accepteren: | False |
Jokertekens accepteren: | True |
-OutputType
Hiermee geeft u het uitvoertype van de uitvoerassembly. Standaard is er geen uitvoertype opgegeven. Deze parameter is alleen geldig wanneer een uitvoerassembly is opgegeven in de opdracht. Zie De opsomming OutputAssemblyType voor meer informatie over de waarden.
De acceptabele waarden voor deze parameter zijn als volgt:
ConsoleApplication
Library
WindowsApplication
Belangrijk
Vanaf PowerShell 7.1 ConsoleApplication
en WindowsApplication
worden niet ondersteund en powerShell genereert een afsluitfout als een van beide is opgegeven als waarden voor de parameter OutputType .
Type: | OutputAssemblyType |
Aliassen: | OT |
Geaccepteerde waarden: | ConsoleApplication, Library, WindowsApplication |
Position: | Named |
Default value: | None |
Vereist: | False |
Pijplijninvoer accepteren: | False |
Jokertekens accepteren: | False |
-PassThru
Hiermee wordt een System.Runtime-object geretourneerd dat de typen vertegenwoordigt die zijn toegevoegd. Deze cmdlet genereert standaard geen uitvoer.
Type: | SwitchParameter |
Position: | Named |
Default value: | False |
Vereist: | False |
Pijplijninvoer accepteren: | False |
Jokertekens accepteren: | False |
-Path
Hiermee geeft u het pad naar broncodebestanden of ASSEMBLY DLL-bestanden die de typen bevatten.
Als u broncodebestanden verzendt, Add-Type
compileert u de code in de bestanden en maakt u een assembly in het geheugen van de typen. De bestandsextensie die is opgegeven in de waarde van Path bepaalt de compiler die Add-Type
gebruikt.
Als u de path - of LiteralPath-parameters gebruikt, wordt gegarandeerd dat u de assembly laadt die u wilt laden.
Type: | String[] |
Position: | 0 |
Default value: | None |
Vereist: | True |
Pijplijninvoer accepteren: | False |
Jokertekens accepteren: | False |
-ReferencedAssemblies
Hiermee geeft u de assembly's waarop het type afhankelijk is. Add-Type
Standaard verwijzen en System.dll
System.Management.Automation.dll
. Naast de standaardassembly's die u opgeeft met deze parameter, worden ook naar de standaardassembly's verwezen.
Vanaf PowerShell 6 bevat ReferencedAssemblies niet de standaard .NET-assembly's. U moet er een specifieke verwijzing naar opnemen in de waarde die aan deze parameter wordt doorgegeven.
Type: | String[] |
Aliassen: | RA |
Position: | Named |
Default value: | None |
Vereist: | False |
Pijplijninvoer accepteren: | False |
Jokertekens accepteren: | False |
-TypeDefinition
Hiermee geeft u de broncode die de typedefinities bevat. Voer de broncode in een tekenreeks of hier-tekenreeks in of voer een variabele in die de broncode bevat. Zie about_Quoting_Rules voor meer informatie over deze tekenreeksen.
Neem een naamruimtedeclaratie op in uw typedefinitie. Als u de declaratie van de naamruimte weglaat, heeft uw type mogelijk dezelfde naam als een ander type of de snelkoppeling voor een ander type, waardoor een onbedoelde overschrijfwijze ontstaat. Als u bijvoorbeeld een type Uitzondering definieert, mislukken scripts die uitzondering gebruiken als snelkoppeling voor System.Exception.
Type: | String |
Position: | 0 |
Default value: | None |
Vereist: | True |
Pijplijninvoer accepteren: | False |
Jokertekens accepteren: | False |
-UsingNamespace
Hiermee geeft u andere naamruimten op die vereist zijn voor de klasse. Dit is vergelijkbaar met het C#-trefwoord. Using
Verwijst standaard Add-Type
naar de systeemnaamruimte . Wanneer de parameter MemberDefinition wordt gebruikt, Add-Type
wordt standaard ook verwezen naar de naamruimte System.Runtime.InteropServices . Naast de standaardnaamruimten die u toevoegt met behulp van de parameter UsingNamespace , worden ook naar de standaardnaamruimten verwezen.
Type: | String[] |
Aliassen: | Using |
Position: | Named |
Default value: | System namespace |
Vereist: | False |
Pijplijninvoer accepteren: | False |
Jokertekens accepteren: | False |
Invoerwaarden
None
U kunt geen objecten doorsluisen naar deze cmdlet.
Uitvoerwaarden
None
Deze cmdlet retourneert standaard geen uitvoer.
Wanneer u de parameter PassThru gebruikt, retourneert deze cmdlet een System.Type-object dat het nieuwe type vertegenwoordigt.
Notities
De typen die u toevoegt, bestaan alleen in de huidige sessie. Als u de typen in alle sessies wilt gebruiken, voegt u deze toe aan uw PowerShell-profiel. Zie about_Profiles voor meer informatie over het profiel.
Typenamen en naamruimten moeten uniek zijn binnen een sessie. U kunt een type niet verwijderen of wijzigen. Als u de code voor een type wilt wijzigen, moet u de naam wijzigen of een nieuwe PowerShell-sessie starten. Anders mislukt de opdracht.
In Windows PowerShell (versie 5.1 en lager) moet u gebruiken Add-Type
voor alles wat nog niet is geladen. Dit geldt meestal voor assembly's die zijn gevonden in de Global Assembly Cache (GAC).
In PowerShell 6 en hoger is er geen GAC, dus PowerShell installeert zijn eigen assembly's in $PSHOME
.
Deze assembly's worden automatisch op aanvraag geladen, dus u hoeft ze niet te laden Add-Type
. Het gebruik Add-Type
is echter nog steeds toegestaan om toe te staan dat scripts impliciet compatibel zijn met elke versie van PowerShell.
Assembly's in de GAC kunnen worden geladen op typenaam, in plaats van op pad. Het laden van assembly's van een willekeurig pad vereist Add-Type
, omdat deze assembly's niet automatisch kunnen worden geladen.