Add-Type

Hozzáad egy Microsoft .NET-osztályt egy PowerShell-munkamenethez.

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

A Add-Type parancsmaggal microsoft .NET Core-osztályt definiálhat a PowerShell-munkamenetben. Ezután a parancsmag használatával példányosíthatja az New-Object objektumokat, és ugyanúgy használhatja az objektumokat, mint bármely .NET Core-objektumot. Ha hozzáad egy Add-Type parancsot a PowerShell-profilhoz, az osztály minden PowerShell-munkamenetben elérhető.

A típust megadhatja egy meglévő szerelvény- vagy forráskódfájl megadásával, de megadhatja a beágyazott vagy változóba mentett forráskódot is. Akár csak egy metódust is megadhat, és Add-Type definiálhatja és létrehozhatja az osztályt. Windows rendszeren ezzel a funkcióval platformhívási (P/Invoke) hívásokat indíthat nem felügyelt függvényekre a PowerShellben. Ha forráskódot ad meg, lefordítja a megadott forráskódot, Add-Type és létrehoz egy memórián belüli szerelvényt, amely tartalmazza az új .NET Core-típusokat.

A paraméterekkel Add-Type megadhat egy alternatív nyelvet és fordítót, a C# az alapértelmezett, a fordító beállításai, a szerelvényfüggőségek, az osztálynévtér, a típus neve és az eredményül kapott szerelvény.

A PowerShell 7-től kezdődően nem fordít le típust, Add-Type ha már létezik ilyen nevű típus. Add-Type Emellett a szerelvényeket is megkeresi a ref mappát tartalmazó pwsh.dllmappa alatti mappában.

Példák

1. példa: .NET-típus hozzáadása munkamenethez

Ez a példa hozzáadja a BasicTest osztályt a munkamenethez egy változóban tárolt forráskód megadásával. A BasicTest osztály egész számokat ad hozzá, objektumot hoz létre, és egész számokat szoroz.

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

A $Source változó tárolja az osztály forráskódját. A típusnak van egy statikus metódusa, a neve AddMultiplypedig egy nem statikus metódus.

A Add-Type parancsmag hozzáadja az osztályt a munkamenethez. Mivel beágyazott forráskódot használ, a parancs a TypeDefinition paraméterrel adja meg a $Source változóban lévő kódot.

A AddBasicTest osztály statikus metódusa kettőspont karakterekkel (::) adja meg az osztály statikus tagját. A függvény hozzáadja az egész számokat, és megjeleníti az összeget.

A New-Object parancsmag példányosítja a BasicTest osztály egy példányát. Menti az új objektumot a $BasicTestObject változóba.

$BasicTestObject A a metódust Multiply használja. Az egész számokat a rendszer megszorozza, és a termék megjelenik.

2. példa: Egy hozzáadott típus vizsgálata

Ez a példa a Get-Member parancsmaggal vizsgálja meg az 1. példában létrehozott objektumokat Add-Type és New-Object parancsmagokat.

[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()

A Get-Member parancsmag lekéri a munkamenethez hozzáadott BasicTest osztály Add-Type típusát és tagjait. A Get-Member parancs felfedi, hogy ez egy System.RuntimeType objektum, amely a System.Object osztályból származik.

A Get-MemberStatikus paraméter lekéri a BasicTest osztály statikus tulajdonságait és metódusait. A kimenet azt mutatja, hogy a metódus szerepel a Add fájlban.

A Get-Member parancsmag lekéri a változóban tárolt objektum tagjait $BasicTestObject . $BasicTestObject A a New-ObjectBasicTest osztályhoz tartozó parancsmag használatával lett létrehozva. A kimenetből kiderül, hogy a változó értéke a $BasicTestObjectBasicTest osztály egy példánya, és egy úgynevezett Multiplytagot tartalmaz.

3. példa: Típusok hozzáadása szerelvényből

Ez a példa hozzáadja a szerelvény osztályait NJsonSchema.dll az aktuális munkamenethez.

Set-Location -Path $PSHOME
$AccType = Add-Type -AssemblyName *jsonschema* -PassThru

Set-Location uses the Path parameter to specify the $PSHOME variable. A változó arra a PowerShell telepítési könyvtárra hivatkozik, ahol a DLL-fájl található.

A $AccType változó a parancsmaggal Add-Type létrehozott objektumot tárolja. Add-Type uses the AssemblyName parameter to specify the name of the assembly. A csillag (*) helyettesítő karakterrel akkor is megkaphatja a megfelelő szerelvényt, ha nem biztos a névben vagy a helyesírásban. A PassThru paraméter olyan objektumokat hoz létre, amelyek a munkamenethez hozzáadott osztályokat képviselik.

4. példa: Natív Windows API-k meghívása

Ez a példa bemutatja, hogyan hívhat meg natív Windows API-kat a PowerShellben. Add-Type A platformhívási (P/Invoke) mechanizmussal meghív egy függvényt a PowerShellből User32.dll . Ez a példa csak a Windows operációs rendszert futtató számítógépeken működik.

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

A $Signature változó tárolja a függvény C#-aláírását ShowWindowAsync . Annak érdekében, hogy az eredményként kapott metódus látható legyen egy PowerShell-munkamenetben, a public kulcsszó hozzá lett adva a szabványos aláíráshoz. További információ: ShowWindowAsync függvény.

A $ShowWindowAsync változó tárolja a PassThru paraméter által Add-Type létrehozott objektumot. A Add-Type parancsmag statikus metódusként adja hozzá a ShowWindowAsync függvényt a PowerShell-munkamenethez. A parancs a MemberDefinition paramétert használja a változóban $Signature mentett metódusdefiníció megadásához. A parancs a Név és névtér paraméterekkel adja meg az osztály nevét és névterét. A PassThru paraméter létrehoz egy objektumot, amely a típusokat jelöli.

A parancsok az új ShowWindowAsync statikus metódust használják a PowerShell-konzol minimalizálására és visszaállítására. A metódus két paramétert használ: az ablakfogópontot és egy egész számot, amely meghatározza az ablak megjelenítésének módját.

A PowerShell-konzol ShowWindowAsync minimalizálásához használja a Get-Process parancsmagot az $PID automatikus változóval az aktuális PowerShell-munkamenetet futtató folyamat lekéréséhez. Ezután az aktuális folyamat MainWindowHandle tulajdonságát használja, és egy értéket 2, amely az SW_MINIMIZE értéket jelöli.

Az ablak ShowWindowAsync visszaállításához használja az ablak pozíciójának értékét 4 , amely az SW_RESTORE értéket jelöli.

Az ablak teljes méretűre állítása érdekében használja annak értékét 3SW_MAXIMIZE.

Paraméterek

-AssemblyName

A típusokat tartalmazó szerelvény nevét adja meg. Add-Type A a megadott szerelvényből veszi át a típusokat. Ez a paraméter akkor szükséges, ha szerelvénynév alapján hoz létre típusokat.

Adja meg egy szerelvény teljes vagy egyszerű nevét, más néven részleges nevét. A szerelvény nevében helyettesítő karakterek használhatók. Ha egyszerű vagy részleges nevet ad meg, Add-Type feloldja a teljes névre, majd a teljes névvel tölti be a szerelvényt.

Ez a paraméter nem fogad el elérési utat vagy fájlnevet. A szerelvény dinamikus csatolású kódtárának (DLL) elérési útjának megadásához használja az Elérési út paramétert.

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

-CompilerOptions

Megadja a forráskód-fordító beállításait. Ezeket a beállításokat a rendszer korrektúra nélkül továbbítja a fordítónak.

Ez a paraméter lehetővé teszi, hogy a fordítót végrehajtható fájl létrehozására, erőforrások beágyazására vagy parancssori beállítások (például a /unsafe beállítás) beállítására irányítsa.

Ugyanabban a parancsban nem használhatja a CompilerOptions és a ReferencedAssemblies paramétereket.

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

-IgnoreWarnings

Figyelmen kívül hagyja a fordító figyelmeztetéseit. Ezzel a paramétersel megakadályozhatja Add-Type , hogy hibaként kezelje a fordítói figyelmeztetéseket.

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

-Language

A forráskódban használt nyelvet adja meg. A paraméter elfogadható értéke a következő:

  • CSharp
Type:Language
Accepted values:CSharp
Position:Named
Default value:CSharp
Accept pipeline input:False
Accept wildcard characters:False

-LiteralPath

Megadja a típusokat tartalmazó forráskódfájlok vagy szerelvény DLL-fájlok elérési útját. A Path paramétertől eltérően a LiteralPath paraméter értéke pontosan a begépelt módon lesz használva. A rendszer egyetlen karaktert sem értelmez helyettesítő karakterként. Ha az elérési út tartalmaz feloldókaraktereket, tegye idézőjelek közé. Az egyszeres idézőjelek arra utasítják a PowerShellt, hogy ne értelmezze feloldókarakterekként a karaktereket.

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

-MemberDefinition

Új tulajdonságokat vagy metódusokat ad meg az osztályhoz. Add-Type A létrehozza a tulajdonságok vagy metódusok támogatásához szükséges sablonkódot.

Windows rendszeren ezzel a funkcióval platformhívási (P/Invoke) hívásokat indíthat nem felügyelt függvényekre a PowerShellben.

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

-Name

Megadja a létrehozandó osztály nevét. Erre a paraméterre akkor van szükség, ha tagdefinícióból hoz létre típust.

A típusnévnek és a névtérnek egyedinek kell lennie egy munkameneten belül. Egy típust nem távolíthat el és nem módosíthat. Egy típus kódjának módosításához módosítania kell a nevet, vagy új PowerShell-munkamenetet kell indítania. Ellenkező esetben a parancs meghiúsul.

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

-Namespace

Megadja a típus névterét.

Ha ez a paraméter nem szerepel a parancsban, a típus a Microsoft.PowerShell.Commands.AddType.AutoGeneratedTypes névtérben jön létre. Ha a paraméter üres sztringértékkel vagy értékével $Nullszerepel a parancsban, a típus a globális névtérben jön létre.

Type:String
Aliases:NS
Position:Named
Default value:None
Accept pipeline input:False
Accept wildcard characters:False

-OutputAssembly

Létrehoz egy DLL-fájlt a szerelvényhez a megadott névvel a helyen. Adjon meg egy nem kötelező elérési utat és fájlnevet. Helyettesítő karakterek használata engedélyezett. Alapértelmezés szerint Add-Type csak a memóriában hozza létre a szerelvényt.

Type:String
Aliases:OA
Position:Named
Default value:None
Accept pipeline input:False
Accept wildcard characters:True

-OutputType

A kimeneti szerelvény kimeneti típusát adja meg. Alapértelmezés szerint nincs megadva kimeneti típus. Ez a paraméter csak akkor érvényes, ha a parancsban kimeneti szerelvény van megadva. További információ az értékekről: OutputAssemblyType Enumerálás.

A paraméter elfogadható értékei a következők:

  • ConsoleApplication
  • Library
  • WindowsApplication

Fontos

A PowerShell 7.1-ben nem támogatott, ConsoleApplicationWindowsApplication és a PowerShell leállási hibát jelez, ha az OutputType paraméter értékeként van megadva.

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

-PassThru

Egy System.Runtime objektumot ad vissza, amely a hozzáadott típusokat jelöli. Alapértelmezés szerint ez a parancsmag nem hoz létre kimenetet.

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

-Path

Megadja a típusokat tartalmazó forráskódfájlok vagy szerelvény DLL-fájlok elérési útját.

Ha forráskódfájlokat küld, lefordítja a fájlban lévő kódot, Add-Type és létrehozza a típusok memóriabeli szerelvényét. A Path értékében megadott fájlkiterjesztés határozza meg a használandó Add-Type fordítót.

Ha szerelvényfájlt küld, Add-Type a szerelvényből veszi a típusokat. Memóriabeli szerelvény vagy globális szerelvény-gyorsítótár megadásához használja az AssemblyName paramétert.

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

-ReferencedAssemblies

Meghatározza azokat a szerelvényeket, amelyektől a típus függ. Alapértelmezés szerint a Add-Type hivatkozások System.dll és System.Management.Automation.dlla . Az ezzel a paraméterrel megadott szerelvényekre a rendszer az alapértelmezett szerelvények mellett hivatkozik.

A PowerShell 6-tól kezdődően a ReferencedAssemblies nem tartalmazza az alapértelmezett .NET-szerelvényeket. A paraméternek átadott értékben meg kell adnia a rájuk mutató konkrét hivatkozást.

Ugyanabban a parancsban nem használhatja a CompilerOptions és a ReferencedAssemblies paramétereket.

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

-TypeDefinition

Megadja a típusdefiníciókat tartalmazó forráskódot. Írja be a forráskódot egy sztringbe vagy ide, vagy írjon be egy változót, amely tartalmazza a forráskódot. Az itt található sztringekkel kapcsolatos további információkért lásd: about_Quoting_Rules.

Adjon meg egy névtérdeklarációt a típusdefinícióban. Ha kihagyja a névtérdeklarációt, előfordulhat, hogy a típus neve megegyezik egy másik típuséval vagy egy másik típus parancsikonjának nevével, ami nem szándékos felülírást okoz. Ha például egy Exception (Kivétel) típust határoz meg, a System.Exception parancsikonjaként Az Exception parancsikont használó parancsfájlok sikertelenek lesznek.

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

-UsingNamespace

Az osztályhoz szükséges egyéb névtereket adja meg. Ez hasonlít a C# kulcsszóhoz. Using

Alapértelmezés szerint Add-Type a rendszernévtérre hivatkozik. A MemberDefinition paraméter használatakor Add-Type alapértelmezés szerint a System.Runtime.InteropServices névtérre is hivatkozik. A UsingNamespace paraméterrel hozzáadott névterekre az alapértelmezett névterek mellett a rendszer hivatkozik.

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

Bevitelek

None

Nem küldhet objektumokat a folyamatból a következőnek Add-Type: .

Kimenetek

None or System.Type

A PassThru paraméter használatakor egy System.Type objektumot ad vissza, Add-Type amely az új típust jelöli. Ellenkező esetben ez a parancsmag nem hoz létre kimenetet.

Jegyzetek

A hozzáadott típusok csak az aktuális munkamenetben léteznek. Ha az összes munkamenetben használni szeretné a típusokat, vegye fel őket a PowerShell-profiljába. A profillal kapcsolatos további információkért lásd about_Profiles.

A típusneveknek és a névtereknek egyedinek kell lenniük egy munkameneten belül. Nem távolíthat el egy típust, és nem módosíthatja azt. Ha módosítania kell egy típus kódját, módosítania kell a nevet, vagy új PowerShell-munkamenetet kell indítania. Ellenkező esetben a parancs meghiúsul.

Az Windows PowerShell (5.1-es vagy újabb verzió) minden olyan funkcióhoz használnia Add-Type kell, amely még nincs betöltve. Ez leggyakrabban a globális szerelvény-gyorsítótárban (GAC) található szerelvényekre vonatkozik. A PowerShell 6-os és újabb verzióiban nincs GAC, így a PowerShell saját szerelvényeket telepít a $PSHome. Ezeket a szerelvényeket a rendszer kérésre automatikusan betölti, így nincs szükség ezek betöltésére Add-Type . A használat Add-Type azonban továbbra is lehetővé teszi, hogy a szkriptek implicit módon kompatibilisek legyenek a PowerShell bármely verziójával.

A GAC-beli szerelvények típusnév alapján tölthetők be, nem elérési út alapján. A szerelvények tetszőleges útvonalról való betöltéséhez szükség van Add-Type, mivel ezek a szerelvények nem tölthetők be automatikusan.