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 parancsmaggal példányosíthatja az New-Object objektumokat, és ugyanúgy használhatja az objektumokat, mint bármely .NET Core-objektumot. Ha egy parancsot Add-Type ad hozzá 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, vagy a forráskód beágyazott vagy változóban mentett megadásával. 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 kezdeményezhet nem felügyelt függvények felé 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 másik nyelvet és fordítót, a C# az alapértelmezett, a fordító beállításai, a szerelvény függőségei, az osztálynévtér, a típus neve és az eredményként 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 a mappa pwsh.dllalatti mappában ref is megkeresi.

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ó kódját.

A Add BasicTest osztály statikus metódusa a kettőspont karakterekkel (::) adja meg az osztály statikus tagját. A rendszer hozzáadja az egész számokat, és megjelenik az összeg.

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

$BasicTestObject a metódust Multiply használja. Az egész számok meg vannak szorozva, és megjelenik a termék.

2. példa: 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 parancsmag és az New-ObjectBasicTest osztály 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 az osztályokat a NJsonSchema.dll szerelvényből az aktuális munkamenethez.

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

Set-Locationa Path paraméter használatával adja meg a változót$PSHOME. A változó arra a PowerShell telepítési könyvtárra hivatkozik, amelyben a DLL-fájl található.

A $AccType változó a parancsmaggal Add-Type létrehozott objektumot tárolja. Add-TypeA AssemblyName paraméter használatával adja meg a szerelvény nevét. 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 User32.dll PowerShellből. 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);
"@

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

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 rendszer hozzáadta a public kulcsszót a standard aláíráshoz. További információ: ShowWindowAsync függvény.

A $ShowWindowAsync változó tárolja a PassThru paraméter által Add-Typelétrehozott objektumot. A Add-Type parancsmag statikus metódusként hozzáadja a ShowWindowAsync függvényt a PowerShell-munkamenethez. A parancs a MemberDefinition paraméter használatával adja meg a változóban mentett metódusdefiníciót $Signature . 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ához és visszaállításához. 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 maximalizálásához használja a megadott SW_MAXIMIZEértéket3.

Paraméterek

-AssemblyName

Megadja a típusokat tartalmazó szerelvény nevét. Add-Type 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 a teljes névre oldja fel, majd a teljes név használatával betölti a szerelvényt.

A Path vagy a LiteralPath paraméterek használata garantálja, hogy betölti a betölteni kívánt szerelvényt. Amikor a AssemblyName paramétert használja, a PowerShell felkéri a .NET-et, hogy oldja fel a szerelvény nevét a szabványos .NET-szerelvényfeloldási folyamattal. Mivel a .NET először az alkalmazásmappában keres, előfordulhat, Add-Type hogy az aktuális mappában lévő verzió helyett egy szerelvényt $PSHOME tölt be. További információ: Szerelvény helye.

Ha a .NET nem tudja feloldani a nevet, a PowerShell az aktuális helyen keresi meg a szerelvényt. Ha helyettesítő karaktereket használ a AssemblyName paraméterben, a .NET-szerelvényfeloldási folyamat meghiúsul, ezért a PowerShell az aktuális helyen fog keresni.

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

-CompilerOptions

Megadja a forráskódfordí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.

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

-Language

Megadja a forráskódban használt nyelvet. Ennek a paraméternek az elfogadható értéke a következő CSharp: .

Type:Language
Accepted values:CSharp
Position:Named
Default value:CSharp
Required:False
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-tal ellentétben a LiteralPath paraméter értéke pontosan a beírt módon lesz használva. A rendszer egyetlen karaktert sem értelmez helyettesítő karakterként. Ha az elérési út tartalmaz escape karaktereket, csatolja egy idézőjelek közé. Az idézőjelek azt mondják a PowerShellnek, hogy ne értelmezzen karaktereket feloldósorozatként.

A Path vagy a LiteralPath paraméterek használata garantálja, hogy betölti a betölteni kívánt szerelvényt.

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

-MemberDefinition

Új tulajdonságokat vagy metódusokat ad meg az osztályhoz. Add-Type 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 kezdeményezhet nem felügyelt függvények felé a PowerShellben.

Type:String[]
Position:1
Default value:None
Required:True
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 egy 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. Nem távolíthat el egy típust, és nem módosíthatja azt. Egy típus kódjának módosításához módosítania kell a nevet, vagy el kell indítania egy új PowerShell-munkamenetet. Ellenkező esetben a parancs meghiúsul.

Type:String
Position:0
Default value:None
Required:True
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 rendszer létrehozza a típust a globális névtérben.

Type:String
Aliases:NS
Position:Named
Default value:None
Required:False
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 választható elérési utat és fájlnevet. A 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
Required:False
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 egy kimeneti szerelvény van megadva a parancsban. Az értékekkel kapcsolatos további információkért lásd : OutputAssemblyType Enumeration.

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

  • ConsoleApplication
  • Library
  • WindowsApplication

Fontos

A PowerShell 7.1-ről 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
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-PassThru

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

Type:SwitchParameter
Position:Named
Default value:False
Required: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 el, lefordítja a kódot a fájlokban, 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ált fordítótAdd-Type.

A Path vagy a LiteralPath paraméterek használata garantálja, hogy betölti a betölteni kívánt szerelvényt.

Type:String[]
Position:0
Default value:None
Required:True
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 a System.Management.Automation.dll. Az ezzel a paraméterrel megadott szerelvényekre az alapértelmezett szerelvények mellett a rendszer 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 egy konkrét hivatkozást kell megadnia rájuk.

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

-TypeDefinition

Megadja a típusdefiníciókat tartalmazó forráskódot. Adja meg a forráskódot egy sztringben vagy egy itt szereplő sztringben, vagy adjon meg egy változót, amely tartalmazza a forráskódot. Az itt szereplő sztringekről további információt a about_Quoting_Rules talál.

Adjon meg névtérdeklarációt a típusdefinícióban. Ha kihagyja a névtér deklarációját, előfordulhat, hogy a típus neve megegyezik egy másik típuséval, vagy egy másik típus parancsikonja, ami nem szándékos felülírást okoz. Ha például egy Kivétel nevű típust határoz meg, a System.Exception parancsikonjaként kivételt használó szkriptek sikertelenek lesznek.

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

-UsingNamespace

Az osztályhoz szükséges egyéb névtereket adja meg. Ez nagyjából olyan, mint a C# kulcsszó, Using.

Alapértelmezés szerint Add-Type a rendszernévtérre hivatkozik. A MemberDefinition paraméter használata Add-Type esetén 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
Required:False
Accept pipeline input:False
Accept wildcard characters:False

Bevitelek

None

Ehhez a parancsmaghoz nem lehet objektumokat csövezni.

Kimenetek

None

Ez a parancsmag alapértelmezés szerint nem ad vissza kimenetet.

Type

A PassThru paraméter használatakor ez a parancsmag egy System.Type objektumot ad vissza, amely az új típust jelöli.

Jegyzetek

A hozzáadott típusok csak az aktuális munkamenetben léteznek. Ha minden 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 a about_Profiles.

A típusneveknek és 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.

A Windows PowerShellben (5.1-es vagy újabb verzió) minden olyan eszközre szüksége Add-Type van, 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.$PSHOME Ezeket a szerelvényeket a rendszer kérésre automatikusan betölti, így nincs szükség Add-Type a betöltésükre. 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ése megköveteli Add-Type, mivel ezek a szerelvények nem tölthetők be automatikusan.