Add-Type
Voegt een Microsoft .NET-klasse toe aan een PowerShell-sessie.
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
Met de Add-Type
cmdlet kunt u een Microsoft .NET Core-klasse definiëren in uw PowerShell-sessie. Vervolgens kunt u objecten instantiëren met behulp van de New-Object
cmdlet en de objecten op dezelfde manier gebruiken als elk .NET Core-object. Als u een Add-Type
opdracht toevoegt aan uw PowerShell-profiel, 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 of opgeslagen in een variabele opgeven. U kunt zelfs alleen een methode opgeven en Add-Type
de klasse definiëren en genereren. In Windows kunt u deze functie gebruiken om Platform Invoke (P/Invoke) aanroepen 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 van Add-Type
gebruiken om 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
wordt een type niet gecompileerd 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 klasse BasicTest aan de sessie toegevoegd door de 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)
Met $Source
de variabele wordt de broncode voor de klasse opgeslagen. Het type heeft een statische methode met de naam Add
en een niet-statische methode met de naam Multiply
.
De Add-Type
cmdlet voegt de klasse toe aan de sessie. Omdat de opdracht gebruikmaakt van inlinebroncode, wordt de parameter TypeDefinition gebruikt om de code in de $Source
variabele op te geven.
De Add
statische methode van de klasse BasicTest gebruikt de dubbele punttekens (::
) om een statisch lid van de klasse op te geven. De gehele getallen worden opgeteld 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
cmdlets en New-Object
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 op van de BasicTest-klasse die Add-Type
zijn toegevoegd aan de sessie. De Get-Member
opdracht laat zien 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. De uitvoer laat zien dat de Add
methode is opgenomen.
De Get-Member
cmdlet haalt de leden van het object op 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 variabele een exemplaar van de klasse BasicTest is en dat deze een lid bevat met de $BasicTestObject
naam Multiply
.
Voorbeeld 3: Typen uit een assembly toevoegen
In dit voorbeeld worden de klassen van de NJsonSchema.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 PowerShell-installatiemap waarin het DLL-bestand zich bevindt.
Met de $AccType
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 als u niet zeker bent van de naam of de spelling. De parameter PassThru genereert objecten 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 te roepen vanuit User32.dll
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 functie op ShowWindowAsync
. 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.
Met $ShowWindowAsync
de variabele wordt het object opgeslagen dat is gemaakt door de Add-Type
parameter PassThru.
De Add-Type
cmdlet voegt de ShowWindowAsync
functie toe aan de PowerShell-sessie als een statische methode. De opdracht gebruikt 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. De parameter PassThru genereert een object 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.
Om de PowerShell-console te 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 gebruikt en een waarde van 2
, die de SW_MINIMIZE
waarde vertegenwoordigt.
Als u het venster wilt herstellen, ShowWindowAsync
gebruikt u een waarde van voor de positie van 4
het venster, die de SW_RESTORE
waarde vertegenwoordigt.
Als u het venster wilt maximaliseren, gebruikt u de waarde van 3
die staat voor 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 van een assembly in, ook wel de gedeeltelijke naam genoemd. 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 parameters Path of LiteralPath gebruikt, zorgt u ervoor dat u de assembly laadt die u wilt laden. Wanneer u de parameter AssemblyName gebruikt, vraagt PowerShell .NET om de assemblynaam om te zetten met behulp van het standaard .NET-assemblyoplossingsproces. Omdat .NET eerst in de toepassingsmap zoekt, Add-Type
laadt mogelijk een assembly uit $PSHOME
in plaats van de versie in de huidige map. Zie Assembly-locatie voor meer informatie.
Als .NET de naam niet kan oplossen, zoekt PowerShell vervolgens op de huidige locatie naar de assembly. Wanneer u jokertekens gebruikt in de parameter AssemblyName , mislukt het .NET-assemblyoplossingsproces, waardoor PowerShell op de huidige locatie kijkt.
Type: | String[] |
Aliases: | AN |
Position: | Named |
Default value: | None |
Required: | True |
Accept pipeline input: | False |
Accept wildcard characters: | 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 de opdracht geven 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 |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | 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 |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Language
Hiermee geeft u de taal op die wordt gebruikt in de broncode. De acceptabele waarde voor deze parameter is CSharp
.
Type: | Language |
Accepted values: | CSharp |
Position: | Named |
Default value: | CSharp |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | 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 wordt getypt. Geen tekens worden geïnterpreteerd als jokertekens. Als het pad escape-tekens bevat, plaatst u het tussen enkele aanhalingstekens. Enkele aanhalingstekens geven PowerShell aan dat geen tekens als escape-reeksen worden geïnterpreteerd.
Als u de parameters Path of LiteralPath gebruikt, wordt gegarandeerd dat u de assembly laadt die u wilt laden.
Type: | String[] |
Aliases: | PSPath, LP |
Position: | Named |
Default value: | None |
Required: | True |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-MemberDefinition
Hiermee geeft u nieuwe eigenschappen of methoden voor de klasse. Add-Type
genereert de sjablooncode die is vereist voor de ondersteuning van de eigenschappen of methoden.
In Windows kunt u deze functie gebruiken om Platform Invoke (P/Invoke) aanroepen uit te voeren naar niet-beheerde functies in PowerShell.
Type: | String[] |
Position: | 1 |
Default value: | None |
Required: | True |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Name
Hiermee geeft u de naam van de klasse te maken. Deze parameter is vereist bij het genereren van een type op basis van een liddefinitie.
De typenaam en naamruimte moeten uniek zijn binnen een sessie. U kunt een type niet uit het geheugen halen 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 |
Required: | True |
Accept pipeline input: | False |
Accept wildcard characters: | 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 |
Aliases: | NS |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-OutputAssembly
Hiermee genereert u een DLL-bestand voor de assembly met de opgegeven naam op de locatie. Voer een optioneel pad en bestandsnaam in. Jokertekens zijn toegestaan. De assembly wordt standaard Add-Type
alleen in het geheugen gegenereerd.
Type: | String |
Aliases: | OA |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | True |
-OutputType
Hiermee geeft u het uitvoertype van de uitvoerassembly op. Standaard is er geen uitvoertype opgegeven. Deze parameter is alleen geldig wanneer een uitvoerassembly is opgegeven in de opdracht . Zie Enumeration 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 zijn opgegeven als waarden voor de OutputType-parameter .
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
Retourneert een System.Runtime-object dat de typen vertegenwoordigt die zijn toegevoegd. Met deze cmdlet wordt standaard geen uitvoer gegenereerd.
Type: | SwitchParameter |
Position: | Named |
Default value: | False |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | 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 Pad , bepaalt de compiler die Add-Type
wordt gebruikt.
Als u de parameters Path of LiteralPath gebruikt, wordt gegarandeerd dat u de assembly laadt die u wilt laden.
Type: | String[] |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-ReferencedAssemblies
Hiermee geeft u de assembly's waarvan het type afhankelijk is. Standaard worden Add-Type
verwijzingen System.dll
en System.Management.Automation.dll
. Naast de standaardassembly's die u met deze parameter opgeeft, wordt verwezen naar de assembly's die u opgeeft.
Vanaf PowerShell 6 bevat ReferencedAssemblies niet de standaard.NET-assembly's. U moet een specifieke verwijzing naar deze waarden opnemen in de waarde die aan deze parameter wordt doorgegeven.
Type: | String[] |
Aliases: | RA |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-TypeDefinition
Hiermee geeft u de broncode die de typedefinities bevat. Voer de broncode in een tekenreeks of here-tekenreeks in of voer een variabele in die de broncode bevat. Zie about_Quoting_Rules voor meer informatie over here-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 er onbedoeld wordt overschreven. Als u bijvoorbeeld een type definieert met de naam Uitzondering, mislukken scripts die Uitzondering gebruiken als de snelkoppeling voor System.Exception .
Type: | String |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-UsingNamespace
Hiermee geeft u andere naamruimten 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
verwijst standaard ook naar de naamruimte System.Runtime.InteropServices . Naast de standaardnaamruimten wordt verwezen naar de naamruimten die u toevoegt met behulp van de parameter UsingNamespace .
Type: | String[] |
Aliases: | Using |
Position: | Named |
Default value: | System namespace |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Invoerwaarden
None
U kunt geen objecten doorsnijden 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 ze 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 uit het geheugen halen 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 is meestal van toepassing op assembly's die worden 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, zodat u ze niet hoeft te gebruiken Add-Type
om ze te laden. Het gebruik Add-Type
van 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. Voor het laden van assembly's vanaf een willekeurig pad is vereist Add-Type
, omdat deze assembly's niet automatisch kunnen worden geladen.