Add-Type
PowerShell oturumuna Microsoft .NET sınıfı ekler.
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
cmdlet'iAdd-Type
, PowerShell oturumunuzda Microsoft bir .NET Core sınıfı tanımlamanızı sağlar. Ardından cmdlet'ini kullanarak nesnelerin örneğini New-Object
oluşturabilir ve nesneleri herhangi bir .NET Core nesnesi gibi kullanabilirsiniz. PowerShell profilinize bir Add-Type
komut eklerseniz sınıfı tüm PowerShell oturumlarında kullanılabilir.
Var olan bir derleme veya kaynak kod dosyası belirterek türü belirtebilir veya kaynak kodu satır içinde belirtebilir veya bir değişkene kaydedebilirsiniz. Hatta yalnızca bir yöntem Add-Type
belirtip sınıfını tanımlayıp oluşturabilirsiniz. Windows'da, PowerShell'de yönetilmeyen işlevlere Platform Çağırma (P/Invoke) çağrıları yapmak için bu özelliği kullanabilirsiniz. Kaynak kodu belirtirseniz, Add-Type
belirtilen kaynak kodunu derler ve yeni .NET Core türlerini içeren bir bellek içi derleme oluşturur.
Alternatif bir dil ve derleyici belirtmek için parametresini Add-Type
kullanabilirsiniz; C# varsayılan, derleyici seçenekleri, derleme bağımlılıkları, sınıf ad alanı, türün adları ve sonuçta elde edilen derlemedir.
PowerShell 7'de başlayarak, Add-Type
aynı ada sahip bir tür zaten varsa bir tür derlemez. Ayrıca, Add-Type
içindeki pwsh.dll
klasörün altındaki bir ref
klasörde derlemeleri arar.
Örnekler
Örnek 1: Oturuma .NET türü ekleme
Bu örnek, bir değişkende depolanan kaynak kodunu belirterek BasicTest sınıfını oturuma ekler. BasicTest sınıfı tamsayı eklemek, nesne oluşturmak ve tamsayıları çarpmak için kullanılır.
$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)
$Source
değişkeni, sınıfın kaynak kodunu depolar. türü adlı statik bir yönteme ve adlı Add
Multiply
statik olmayan bir yönteme sahiptir.
cmdlet'i Add-Type
sınıfını oturuma ekler. Satır içi kaynak kodu kullandığından, komutu typeDefinition parametresini kullanarak değişkenindeki $Source
kodu belirtir.
Add
BasicTest sınıfının statik yöntemi, sınıfın statik bir üyesini belirtmek için iki nokta üst üste karakterlerini (::
) kullanır. Tamsayılar eklenir ve toplam görüntülenir.
cmdlet'i New-Object
, BasicTest sınıfının bir örneğini oluşturur. Yeni nesneyi değişkene $BasicTestObject
kaydeder.
$BasicTestObject
Multiply
yöntemini kullanır. Tamsayılar çarpılır ve ürün görüntülenir.
Örnek 2: Eklenen bir türü inceleme
Bu örnek, ve New-Object
cmdlet'lerinin Örnek 1'de oluşturduğu nesneleri Add-Type
incelemek için cmdlet'ini kullanırGet-Member
.
[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()
cmdlet'i Get-Member
, oturuma eklenen BasicTest sınıfının Add-Type
türünü ve üyelerini alır. Get-Member
komutu bunun System.Object sınıfından türetilen bir System.RuntimeType nesnesi olduğunu gösterir.
Static parametresi,Get-Member
BasicTest sınıfının statik özelliklerini ve yöntemlerini alır. Çıkış, yönteminin Add
dahil olduğunu gösterir.
cmdlet'i Get-Member
değişkeninde depolanan nesnenin üyelerini $BasicTestObject
alır.
$BasicTestObject
, BasicTest sınıfıyla cmdlet'i kullanılarak New-Object
oluşturulmuştur. Çıktı, değişkeninin değerinin $BasicTestObject
BasicTest sınıfının bir örneği olduğunu ve adlı Multiply
bir üye içerdiğini gösterir.
Örnek 3: Derlemeden tür ekleme
Bu örnek, derlemedeki NJsonSchema.dll
sınıfları geçerli oturuma ekler.
Set-Location -Path $PSHOME
$AccType = Add-Type -AssemblyName *jsonschema* -PassThru
Set-Location
değişkeni belirtmek için Path parametresini $PSHOME
kullanır. değişkeni, DLL dosyasının bulunduğu PowerShell yükleme dizinine başvurur.
$AccType
değişkeni, cmdlet'iyle Add-Type
oluşturulan bir nesneyi depolar. Add-Type
derlemenin adını belirtmek için AssemblyName parametresini kullanır. Yıldız işareti (*
) joker karakteri, adından veya yazım denetiminden emin olmadığınız durumlarda bile doğru derlemeyi almanıza olanak tanır. PassThru parametresi, oturuma eklenen sınıfları temsil eden nesneler oluşturur.
Örnek 4: Yerel Windows API'lerini çağırma
Bu örnekte, PowerShell'de yerel Windows API'lerinin nasıl çağrılması gösterilmektedir. Add-Type
, PowerShell'den içinde bir işlevi User32.dll
çağırmak için Platform Çağırma (P/Invoke) mekanizmasını kullanır. Bu örnek yalnızca Windows işletim sistemini çalıştıran bilgisayarlarda çalışır.
$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)
$Signature
değişkeni işlevin C# imzasını ShowWindowAsync
depolar. Sonuçta elde edilen yöntemin bir PowerShell oturumunda görünür olduğundan emin olmak için anahtar public
sözcüğü standart imzaya eklendi. Daha fazla bilgi için bkz. ShowWindowAsync işlevi.
değişkeni, $ShowWindowAsync
PassThru parametresi tarafından Add-Type
oluşturulan nesneyi depolar.
cmdlet'i Add-Type
işlevi PowerShell oturumuna statik bir yöntem olarak ekler ShowWindowAsync
. komutu, değişkene kaydedilen yöntem tanımını belirtmek için MemberDefinition parametresini $Signature
kullanır. komutu, sınıf için bir ad ve ad alanı belirtmek üzere Ad ve Ad Alanı parametrelerini kullanır. PassThru parametresi, türleri temsil eden bir nesne oluşturur.
PowerShell konsolunu simge durumuna küçültmek ve geri yüklemek için komutlarda yeni ShowWindowAsync
statik yöntem kullanılır. yöntemi iki parametre alır: pencere tutamacı ve pencerenin nasıl görüntüleneceğini belirten bir tamsayı.
PowerShell konsolunu en aza indirmek için cmdlet'ini ShowWindowAsync
$PID
otomatik değişkenle birlikte kullanarak Get-Process
geçerli PowerShell oturumunu barındıran işlemi alır. Ardından geçerli işlemin MainWindowHandle özelliğini ve değerini 2
temsil SW_MINIMIZE
eden değerini kullanır.
Pencereyi geri yüklemek için pencere ShowWindowAsync
konumu için değerini 4
kullanır ve bu değer değeri temsil eder SW_RESTORE
.
Pencerenin ekranı kaplamasını sağlamak için öğesini temsil SW_MAXIMIZE
eden değerini 3
kullanın.
Parametreler
-AssemblyName
Türleri içeren bir derlemenin adını belirtir. Add-Type
belirtilen derlemeden türleri alır. Derleme adını temel alan türler oluştururken bu parametre gereklidir.
Derlemenin kısmi adı olarak da bilinen tam veya basit adını girin. Derleme adında joker karakterlere izin verilir. Basit veya kısmi bir ad girerseniz, Add-Type
bunu tam ada çözümler ve sonra derlemeyi yüklemek için tam adı kullanır.
Bu parametre bir yolu veya dosya adını kabul etmez. Derleme dinamik bağlantı kitaplığı (DLL) dosyasının yolunu girmek için Path parametresini kullanın.
Type: | String[] |
Aliases: | AN |
Position: | Named |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | True |
-CompilerOptions
Kaynak kod derleyicisi seçeneklerini belirtir. Bu seçenekler düzeltme olmadan derleyiciye gönderilir.
Bu parametre, derleyiciyi yürütülebilir bir dosya oluşturmaya, kaynakları eklemeye veya seçeneği gibi komut satırı seçeneklerini ayarlamaya /unsafe
yönlendirmenizi sağlar.
Aynı komutta CompilerOptions ve ReferencedAssemblies parametrelerini kullanamazsınız.
Type: | String[] |
Position: | Named |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-IgnoreWarnings
Derleyici uyarılarını yoksayar. Derleyici uyarılarının hata olarak işlenmesini önlemek Add-Type
için bu parametreyi kullanın.
Type: | SwitchParameter |
Position: | Named |
Default value: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Language
Kaynak kodda kullanılan dili belirtir. Bu parametre için kabul edilebilir değer şudur:
CSharp
Type: | Language |
Accepted values: | CSharp |
Position: | Named |
Default value: | CSharp |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-LiteralPath
Kaynak kod dosyalarının veya türleri içeren derleme DLL dosyalarının yolunu belirtir. Path'in aksine, LiteralPath parametresinin değeri tam olarak yazıldığı gibi kullanılır. Hiçbir karakter joker karakter olarak yorumlanmamıştır. Yol kaçış karakterleri içeriyorsa, tek tırnak içine alın. Tek tırnak işaretleri PowerShell'e hiçbir karakteri kaçış dizisi olarak yorumlamaması gerektiğini söyler.
Type: | String[] |
Aliases: | PSPath, LP |
Position: | Named |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-MemberDefinition
sınıfı için yeni özellikleri veya yöntemleri belirtir. Add-Type
, özellikleri veya yöntemleri desteklemek için gereken şablon kodunu oluşturur.
Windows'da, PowerShell'deki yönetilmeyen işlevlere Platform Çağırma (P/Invoke) çağrıları yapmak için bu özelliği kullanabilirsiniz.
Type: | String[] |
Position: | 1 |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Name
Oluşturulacak sınıfın adını belirtir. Üye tanımından bir tür oluşturulurken bu parametre gereklidir.
Tür adı ve ad alanı bir oturum içinde benzersiz olmalıdır. Bir türü kaldıramaz veya değiştiremezsiniz. Bir türün kodunu değiştirmek için adı değiştirmeniz veya yeni bir PowerShell oturumu başlatmanız gerekir. Aksi takdirde, komut başarısız olur.
Type: | String |
Position: | 0 |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Namespace
Tür için bir ad alanı belirtir.
Bu parametre komuta dahil değilse, tür Microsoft oluşturulur. PowerShell.Commands.AddType.AutoGeneratedTypes ad alanı. parametresi komutuna boş bir dize değeriyle veya değeriyle $Null
dahil edilirse, tür genel ad alanında oluşturulur.
Type: | String |
Aliases: | NS |
Position: | Named |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-OutputAssembly
Konumda belirtilen ada sahip derleme için bir DLL dosyası oluşturur. İsteğe bağlı bir yol ve dosya adı girin. Joker karakterlere izin verilir. Varsayılan olarak, Add-Type
derlemeyi yalnızca bellekte oluşturur.
Type: | String |
Aliases: | OA |
Position: | Named |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | True |
-OutputType
Çıkış derlemesinin çıkış türünü belirtir. Varsayılan olarak, hiçbir çıkış türü belirtilmez. Bu parametre yalnızca komutta bir çıkış derlemesi belirtildiğinde geçerlidir. Değerler hakkında daha fazla bilgi için bkz . OutputAssemblyType Sabit Listesi.
Bu parametre için kabul edilebilir değerler şunlardır:
ConsoleApplication
Library
WindowsApplication
Önemli
PowerShell 7.1 ConsoleApplication
itibarıyla desteklenmez ve WindowsApplication
OutputType parametresi için değer olarak belirtilmişse PowerShell sonlandırıcı bir hata oluşturur.
Type: | OutputAssemblyType |
Aliases: | OT |
Accepted values: | ConsoleApplication, Library, WindowsApplication |
Position: | Named |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-PassThru
Eklenen türleri temsil eden bir System.Runtime nesnesi döndürür. Varsayılan olarak, bu cmdlet herhangi bir çıkış oluşturmaz.
Type: | SwitchParameter |
Position: | Named |
Default value: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Path
Kaynak kod dosyalarının veya türleri içeren derleme DLL dosyalarının yolunu belirtir.
Kaynak kod dosyalarını gönderirseniz, Add-Type
dosyalardaki kodu derler ve türlerden oluşan bellek içi bir derleme oluşturur. Path değerinde belirtilen dosya uzantısı, kullanan Add-Type
derleyiciyi belirler.
Bir derleme dosyası gönderirseniz, Add-Type
derlemeden türleri alır. Bellek içi derlemeyi veya genel derleme önbelleğini belirtmek için AssemblyName parametresini kullanın.
Type: | String[] |
Position: | 0 |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-ReferencedAssemblies
Türün bağımlı olduğu derlemeleri belirtir. Varsayılan olarak ve Add-Type
System.Management.Automation.dll
öğesine başvururSystem.dll
. Bu parametreyi kullanarak belirttiğiniz derlemelere, varsayılan derlemelere ek olarak başvurulur.
PowerShell 6'da , ReferencedAssemblies varsayılan .NET derlemelerini içermez. Bu parametreye geçirilen değere bunlara belirli bir başvuru eklemeniz gerekir.
Aynı komutta CompilerOptions ve ReferencedAssemblies parametrelerini kullanamazsınız.
Type: | String[] |
Aliases: | RA |
Position: | Named |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-TypeDefinition
Tür tanımlarını içeren kaynak kodunu belirtir. Kaynak kodu bir dizeye veya here-string'e girin ya da kaynak kodu içeren bir değişken girin. Here-strings hakkında daha fazla bilgi için bkz. about_Quoting_Rules.
Tür tanımınıza bir ad alanı bildirimi ekleyin. Ad alanı bildirimini atlarsanız, türünüz başka bir türle veya başka bir türün kısayoluyla aynı ada sahip olabilir ve bu da yanlışlıkla üzerine yazılmasının nedeni olabilir. Örneğin, Özel Durum adlı bir tür tanımlarsanız, System.Exception kısayolu olarak Özel Durum kullanan betikler başarısız olur.
Type: | String |
Position: | 0 |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-UsingNamespace
sınıfı için gereken diğer ad alanlarını belirtir. Bu, C# anahtar sözcüğüne çok benzer. Using
Varsayılan olarak, Add-Type
Sistem ad alanına başvurur. MemberDefinition parametresi kullanıldığında, Add-Type
varsayılan olarak System.Runtime.InteropServices ad alanına da başvurur. UsingNamespace parametresini kullanarak eklediğiniz ad alanlarına, varsayılan ad alanlarına ek olarak başvurulur.
Type: | String[] |
Aliases: | Using |
Position: | Named |
Default value: | System namespace |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Girişler
None
Nesneleri bu cmdlet'e yöneltemezsiniz.
Çıkışlar
None
Varsayılan olarak, bu cmdlet çıkış döndürmez.
PassThru parametresini kullandığınızda, bu cmdlet yeni türü temsil eden bir System.Type nesnesi döndürür.
Notlar
Eklediğiniz türler yalnızca geçerli oturumda bulunur. Tüm oturumlarda türleri kullanmak için bunları PowerShell profilinize ekleyin. Profil hakkında daha fazla bilgi için bkz. about_Profiles.
Tür adları ve ad alanları bir oturum içinde benzersiz olmalıdır. Bir türü kaldıramaz veya değiştiremezsiniz. Bir türün kodunu değiştirmeniz gerekiyorsa, adı değiştirmeniz veya yeni bir PowerShell oturumu başlatmanız gerekir. Aksi takdirde komut başarısız olur.
Windows PowerShell 'de (sürüm 5.1 ve altı), henüz yüklenmemiş her şey için kullanmanız Add-Type
gerekir. Bu genellikle Genel Derleme Önbelleği'nde (GAC) bulunan derlemeler için geçerlidir.
PowerShell 6 ve üzeri sürümlerde GAC yoktur, bu nedenle PowerShell kendi derlemelerini 'ye $PSHome
yükler.
Bu derlemeler istek üzerine otomatik olarak yüklenir, bu nedenle bunları yüklemek için kullanılması Add-Type
gerekmez. Ancak, betiklerin PowerShell'in herhangi bir sürümüyle örtük olarak uyumlu olmasını sağlamak için kullanmaya Add-Type
izin verilir.
GAC'deki derlemeler yol yerine tür adına göre yüklenebilir. Derlemelerin rastgele bir yoldan yüklenmesi gerekir Add-Type
, çünkü bu derlemeler otomatik olarak yüklenemez.
İlişkili Bağlantılar
Geri Bildirim
Gönderin ve geri bildirimi görüntüleyin