Aracılığıyla paylaş


Add-Type

PowerShell oturumuna bir 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'i Add-Type , PowerShell oturumunuzda bir Microsoft .NET Core sınıfı tanımlamanıza olanak tanır. Daha sonra 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 derlemeyi veya kaynak kod dosyalarını belirterek türü belirtebilir veya kaynak kodu satır içinde veya bir değişkene kaydedilmiş olarak belirtebilirsiniz. Hatta yalnızca bir yöntem belirtebilir ve Add-Type sınıfını tanımlayıp oluşturabilirsiniz. Windows'da, PowerShell'deki 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çeren pwsh.dllklasö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ı için kaynak kodunu depolar. türü adlı statik bir yönteme ve adlı AddMultiplystatik 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şkendeki $Source kodu belirtir.

AddBasicTest 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-ObjectBasicTest sınıfının bir örneğini oluşturur. Yeni nesneyi değişkene $BasicTestObject kaydeder.

$BasicTestObjectMultiply 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, Get-Member ve New-Object cmdlet'lerinin Örnek 1'de oluşturduğu nesneleri Add-Type incelemek için cmdlet'ini kullanır.

[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.

Get-MemberStatic parametresi, 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 $BasicTestObjectBasicTest sınıfının bir örneği olduğunu ve adlı Multiplybir ü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 olmamanız halinde 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 örnek, PowerShell'de yerel Windows API'lerinin nasıl çağrılduğunu gösterir. 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 olmasını sağlamak için anahtar public sözcüğü standart imzaya eklendi. Daha fazla bilgi için bkz. ShowWindowAsync işlevi.

değişkeni, $ShowWindowAsyncPassThru parametresi tarafından Add-Type oluşturulan nesneyi depolar. cmdlet'i Add-Type , işlevi statik bir yöntem olarak PowerShell oturumuna ekler ShowWindowAsync . komutu, değişkene kaydedilen yöntem tanımını belirtmek için MemberDefinition parametresini $Signature kullanır. Komut, 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 2temsil SW_MINIMIZE eden değerini kullanır.

Pencereyi geri yüklemek için, ShowWindowAsync değeri temsil SW_RESTORE eden pencere konumu için değerini 4 kullanır.

Pencerenin ekranı kaplamasını sağlamak için öğesini temsil SW_MAXIMIZEeden 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ına göre 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 ardından 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
Required:True
Accept pipeline input:False
Accept wildcard characters:True

-CompilerOptions

Kaynak kodu derleyicisi seçeneklerini belirtir. Bu seçenekler düzeltme yapılmadan derleyiciye gönderilir.

Bu parametre, derleyiciyi yürütülebilir 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
Required:False
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
Required: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
Required:False
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
Required:True
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
Required:True
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
Required:True
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.PowerShell.Commands.AddType.AutoGeneratedTypes ad alanında oluşturulur. parametresi komutuna boş bir dize değeriyle veya değeriyle $Nulldahil edilirse, tür genel ad alanında oluşturulur.

Type:String
Aliases:NS
Position:Named
Default value:None
Required:False
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
Required:False
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 WindowsApplicationOutputType 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
Required:False
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
Required: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
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-ReferencedAssemblies

Türün bağımlı olduğu derlemeleri belirtir. Varsayılan olarak ve Add-TypeSystem.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
Required:False
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
Required:True
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-TypeSistem 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
Required:False
Accept pipeline input:False
Accept wildcard characters:False

Girişler

None

İşlem hattının Add-Typeaşağısına nesnesi gönderemezsiniz.

Çıkışlar

None or System.Type

PassThru parametresini kullandığınızda, Add-Type yeni türü temsil eden bir System.Type nesnesi döndürür. Aksi takdirde, bu cmdlet herhangi bir çıkış oluşturmaz.

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ı), önceden yüklenmemiş her şey için kullanmanız Add-Type gerekir. Bu genellikle Genel Bütünleştirilmiş Kod Ö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 $PSHomeyü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 yola göre değil tür adına göre yüklenebilir. Bu derlemeler otomatik olarak yüklenemediğinden, derlemelerin rastgele bir yoldan yüklenmesi gerekir Add-Type.