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.dll
alatti 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 Add
Multiply
pedig 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-Member
Statikus 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-Object
BasicTest osztály használatával lett létrehozva. A kimenetből kiderül, hogy a változó értéke a $BasicTestObject
BasicTest osztály egy példánya, és egy úgynevezett Multiply
tagot tartalmaz.
3. példa: Típusok hozzáadása szerelvényből
Ez a példa hozzáadja az osztályokat a JsonSchema.NET.dll
szerelvényből az aktuális munkamenethez.
Set-Location -Path $PSHOME
$AccType = Add-Type -AssemblyName *jsonschema* -PassThru
Set-Location
a 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-Type
A 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-Type
lé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 $Null
szerepel 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, ConsoleApplication
WindowsApplication
é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.
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.
Kapcsolódó hivatkozások
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: