about_Classes

Kısa açıklama

Kendi özel türlerinizi oluşturmak için sınıfları nasıl kullanabileceğinizi açıklar.

Uzun açıklama

PowerShell 5,0, sınıfları ve diğer Kullanıcı tanımlı türleri tanımlamak için biçimsel bir sözdizimi ekler. Sınıfların eklenmesi, geliştiricilerin ve BT uzmanlarının PowerShell 'i daha geniş bir kullanım örneği için çok büyük erimli hale getirmenizi sağlar. PowerShell yapıtlarının geliştirilmesini basitleştirir ve yönetim yüzeylerinin kapsamını hızlandırır.

Sınıf bildirimi, çalışma zamanında nesne örnekleri oluşturmak için kullanılan bir şema ' dir. Bir sınıf tanımladığınızda, sınıf adı türün adıdır. Örneğin, Device adlı bir sınıf bildirirseniz ve yeni bir cihaz örneğine bir değişken başladıysanız $dev , bir nesne veya cihaz $dev türünde bir örnektir. Her cihazın örneği özelliklerinde farklı değerlere sahip olabilir.

Desteklenen senaryolar

  • Sınıflar, özellikler, Yöntemler, devralma vb. gibi tanıdık nesne odaklı programlama semantiğini kullanarak PowerShell 'de özel türler tanımlayın.
  • PowerShell dilini kullanarak hata ayıklama türleri.
  • Biçimsel mekanizmalar kullanarak özel durumlar oluşturun ve işleyin.
  • PowerShell dilini kullanarak DSC kaynaklarını ve bunlarla ilişkili türleri tanımlayın.

Syntax

Sınıflar aşağıdaki sözdizimi kullanılarak bildirilmiştir:

class <class-name> [: [<base-class>][,<interface-list]] {
    [[<attribute>] [hidden] [static] <property-definition> ...]
    [<class-name>([<constructor-argument-list>])
      {<constructor-statement-list>} ...]
    [[<attribute>] [hidden] [static] <method-definition> ...]
}

Sınıflar aşağıdaki sözdizimlerinden biri kullanılarak oluşturulur:

[$<variable-name> =] New-Object -TypeName <class-name> [
  [-ArgumentList] <constructor-argument-list>]
[$<variable-name> =] [<class-name>]::new([<constructor-argument-list>])

Not

[<class-name>]::new()Sözdizimi kullanılırken, sınıf adı etrafında köşeli ayraçlar zorunludur. Köşeli ayraçlar, PowerShell için bir tür tanımına işaret edin.

Örnek sözdizimi ve kullanımı

Bu örnek, kullanılabilir bir sınıf oluşturmak için gereken en az sözdizimi gösterir.

class Device {
    [string]$Brand
}

$dev = [Device]::new()
$dev.Brand = "Microsoft"
$dev
Brand
-----
Microsoft

Sınıf özellikleri

Özellikler sınıf kapsamında belirtilen değişkenlerdir. Bir özellik, herhangi bir yerleşik türü veya başka bir sınıfın bir örneği olabilir. Sınıfların, sahip oldukları Özellik sayısında hiçbir kısıtlaması yoktur.

Basit özelliklere sahip örnek sınıf

class Device {
    [string]$Brand
    [string]$Model
    [string]$VendorSku
}

$device = [Device]::new()
$device.Brand = "Microsoft"
$device.Model = "Surface Pro 4"
$device.VendorSku = "5072641000"

$device
Brand     Model         VendorSku
-----     -----         ---------
Microsoft Surface Pro 4 5072641000

Sınıf özelliklerindeki örnek karmaşık türler

Bu örnek, Device sınıfını kullanarak boş bir raf sınıfı tanımlar. Örnek olarak, bunu izleyen örnekler, rafa nasıl cihaz ekleneceğini ve önceden yüklenmiş bir rafa nasıl başlayakullanacağınızı gösterir.

class Device {
    [string]$Brand
    [string]$Model
    [string]$VendorSku
}

class Rack {
    [string]$Brand
    [string]$Model
    [string]$VendorSku
    [string]$AssetId
    [Device[]]$Devices = [Device[]]::new(8)

}

$rack = [Rack]::new()

$rack

Brand     :
Model     :
VendorSku :
AssetId   :
Devices   : {$null, $null, $null, $null...}


Sınıf yöntemleri

Yöntemler, bir sınıfın gerçekleştirebildiği eylemleri tanımlar. Yöntemler, giriş verileri sağlayan parametreler alabilir. Yöntemler çıkış döndürebilir. Bir yöntem tarafından döndürülen veriler tanımlanmış herhangi bir veri türü olabilir.

Bir sınıf için bir yöntem tanımlarken, otomatik değişkenini kullanarak geçerli sınıf nesnesine başvurun $this . Bu, özelliklere ve geçerli sınıfta tanımlanan diğer yöntemlere erişmenizi sağlar.

Özellikler ve yöntemlerle örnek basit sınıf

Cihaza veya cihazdan cihaz eklemek ve kaldırmak için raf sınıfını genişletme.

class Device {
    [string]$Brand
    [string]$Model
    [string]$VendorSku

    [string]ToString(){
        return ("{0}|{1}|{2}" -f $this.Brand, $this.Model, $this.VendorSku)
    }
}

class Rack {
    [int]$Slots = 8
    [string]$Brand
    [string]$Model
    [string]$VendorSku
    [string]$AssetId
    [Device[]]$Devices = [Device[]]::new($this.Slots)

    [void] AddDevice([Device]$dev, [int]$slot){
        ## Add argument validation logic here
        $this.Devices[$slot] = $dev
    }

    [void]RemoveDevice([int]$slot){
        ## Add argument validation logic here
        $this.Devices[$slot] = $null
    }

    [int[]] GetAvailableSlots(){
        [int]$i = 0
        return @($this.Devices.foreach{ if($_ -eq $null){$i}; $i++})
    }
}

$rack = [Rack]::new()

$surface = [Device]::new()
$surface.Brand = "Microsoft"
$surface.Model = "Surface Pro 4"
$surface.VendorSku = "5072641000"

$rack.AddDevice($surface, 2)

$rack
$rack.GetAvailableSlots()

Slots     : 8
Brand     :
Model     :
VendorSku :
AssetId   :
Devices   : {$null, $null, Microsoft|Surface Pro 4|5072641000, $null...}

0
1
3
4
5
6
7

Sınıf yöntemlerinde çıkış

Yöntemlerin bir dönüş türü tanımlanmış olmalıdır. Bir yöntem çıkış döndürmezse, çıkış türü olmalıdır [void] .

Sınıf yöntemlerinde, bildiriminde bahsedilen nesneler hariç işlem hattına hiçbir nesne gönderilmez return . Koddan işlem hattının yanlışlıkla çıkışı yoktur.

Not

Bu, her şeyin işlem hattına gittiğinin, PowerShell işlevlerinin çıktıyı işleme işleminden temelde farklıdır.

Bir sınıf yönteminin içinden hata akışına yazılan Sonlandırılmamış hatalar üzerinden geçirilir. throwSonlandırıcı hatasını yüzey için kullanmanız gerekir. Write-*Cmdlet 'lerini kullanarak, bir sınıf yöntemi Içinden PowerShell 'in Çıkış akışlarına yazmaya devam edebilirsiniz. Ancak, yöntemin yalnızca ifadesini kullanarak nesneleri yayabilmesi için bu kaçınılmalıdır return .

Yöntem çıkışı

Bu örnek, ifade haricinde sınıf yöntemlerinden ardışık düzen için yanlışlıkla çıkış olmadığını gösterir return .

class FunWithIntegers
{
    [int[]]$Integers = 0..10

    [int[]]GetOddIntegers(){
        return $this.Integers.Where({ ($_ % 2) })
    }

    [void] GetEvenIntegers(){
        # this following line doesn't go to the pipeline
        $this.Integers.Where({ ($_ % 2) -eq 0})
    }

    [string]SayHello(){
        # this following line doesn't go to the pipeline
        "Good Morning"

        # this line goes to the pipeline
        return "Hello World"
    }
}

$ints = [FunWithIntegers]::new()
$ints.GetOddIntegers()
$ints.GetEvenIntegers()
$ints.SayHello()
1
3
5
7
9
Hello World

Oluşturucu

Oluşturucular, sınıfının örneğini oluşturma sırasında varsayılan değerleri ayarlamanıza ve nesne mantığını doğrulamanıza olanak sağlar. Oluşturucular, sınıfıyla aynı ada sahiptir. Oluşturucuların yeni nesnenin veri üyelerini başlatması için bağımsız değişkenleri olabilir.

Sınıfta sıfır veya daha fazla Oluşturucu tanımlanmış olabilir. Hiçbir Oluşturucu tanımlanmazsa, sınıfa varsayılan parametresiz bir Oluşturucu verilir. Bu Oluşturucu, tüm üyeleri varsayılan değerlerine başlatır. Nesne türleri ve dizelerine null değerler verilir. Oluşturucuyu tanımladığınızda, varsayılan parametresiz Oluşturucu oluşturulmaz. Bir tane gerekliyse parametresiz bir Oluşturucu oluşturun.

Oluşturucu temel sözdizimi

Bu örnekte, Device sınıfı özellikler ve bir Oluşturucu ile tanımlanmıştır. Bu sınıfı kullanmak için, kullanıcının oluşturucuda listelenen parametrelerin değerlerini sağlaması gerekir.

class Device {
    [string]$Brand
    [string]$Model
    [string]$VendorSku

    Device(
        [string]$b,
        [string]$m,
        [string]$vsk
    ){
        $this.Brand = $b
        $this.Model = $m
        $this.VendorSku = $vsk
    }
}

[Device]$surface = [Device]::new("Microsoft", "Surface Pro 4", "5072641000")

$surface
Brand     Model         VendorSku
-----     -----         ---------
Microsoft Surface Pro 4 5072641000

Birden çok Oluşturucu içeren örnek

Bu örnekte, Device sınıfı özellikler, varsayılan bir Oluşturucu ve örneği başlatmak için bir Oluşturucu ile tanımlanmıştır.

Varsayılan Oluşturucu, markayı tanımsız olarak ayarlar ve model ile satıcı-SKU değerlerini null değerlerle bırakır.

class Device {
    [string]$Brand
    [string]$Model
    [string]$VendorSku

    Device(){
        $this.Brand = 'Undefined'
    }

    Device(
        [string]$b,
        [string]$m,
        [string]$vsk
    ){
        $this.Brand = $b
        $this.Model = $m
        $this.VendorSku = $vsk
    }
}

[Device]$somedevice = [Device]::new()
[Device]$surface = [Device]::new("Microsoft", "Surface Pro 4", "5072641000")

$somedevice
$surface
Brand       Model           VendorSku
-----       -----           ---------
Undefined
Microsoft   Surface Pro 4   5072641000

Hidden özniteliği

hiddenÖzniteliği bir özelliği veya yöntemi gizler. Özelliği veya yöntemine hala Kullanıcı tarafından erişilebilir ve nesnenin kullanılabildiği tüm kapsamlar kullanılabilir. Gizli Üyeler cmdlet 'ten gizlenir Get-Member ve sınıf tanımının dışında sekme tamamlama veya IntelliSense kullanılarak görüntülenemez.

Daha fazla bilgi için bkz. About_hidden.

Gizli öznitelikleri kullanan örnek

Bir raf nesnesi oluşturulduğunda, cihazların yuva sayısı, herhangi bir zamanda değiştirilmemesi gereken sabit bir değerdir. Bu değer, oluşturma zamanında bilinir.

Gizli özniteliği kullanmak, geliştiricinin yuva sayısını gizli tutmaya ve yanlışlıkla değişiklik yapılmasını engelleyecek şekilde izin verir.

class Device {
    [string]$Brand
    [string]$Model
}

class Rack {
    [int] hidden $Slots = 8
    [string]$Brand
    [string]$Model
    [Device[]]$Devices = [Device[]]::new($this.Slots)

    Rack ([string]$b, [string]$m, [int]$capacity){
        ## argument validation here

        $this.Brand = $b
        $this.Model = $m
        $this.Slots = $capacity

        ## reset rack size to new capacity
        $this.Devices = [Device[]]::new($this.Slots)
    }
}

[Rack]$r1 = [Rack]::new("Microsoft", "Surface Pro 4", 16)

$r1
$r1.Devices.Length
$r1.Slots
Brand     Model         Devices
-----     -----         -------
Microsoft Surface Pro 4 {$null, $null, $null, $null...}
16
16

Bildirim yuvaları özelliği $r1 Çıkışta gösterilmez. Ancak, boyut Oluşturucu tarafından değiştirildi.

Static özniteliği

staticÖzniteliği, sınıfında bulunan ve örneği olmayan bir özelliği veya yöntemi tanımlar.

Statik bir özellik, sınıf örneklemesinin bağımsız olarak her zaman kullanılabilir. Statik bir özellik, sınıfının tüm örnekleri arasında paylaşılır. Statik bir yöntem her zaman kullanılabilir. Tüm oturum yayılması için tüm statik özellikler canlı.

Statik öznitelikleri ve yöntemleri kullanan örnek

Burada oluşturulan rafların veri merkezinizde mevcut olduğunu varsayalım. Bu nedenle, kodunuzdaki rafların izlenmesini sürdürmek istersiniz.

class Device {
    [string]$Brand
    [string]$Model
}

class Rack {
    hidden [int] $Slots = 8
    static [Rack[]]$InstalledRacks = @()
    [string]$Brand
    [string]$Model
    [string]$AssetId
    [Device[]]$Devices = [Device[]]::new($this.Slots)

    Rack ([string]$b, [string]$m, [string]$id, [int]$capacity){
        ## argument validation here

        $this.Brand = $b
        $this.Model = $m
        $this.AssetId = $id
        $this.Slots = $capacity

        ## reset rack size to new capacity
        $this.Devices = [Device[]]::new($this.Slots)

        ## add rack to installed racks
        [Rack]::InstalledRacks += $this
    }

    static [void]PowerOffRacks(){
        foreach ($rack in [Rack]::InstalledRacks) {
            Write-Warning ("Turning off rack: " + ($rack.AssetId))
        }
    }
}

Test statik özelliği ve yöntemi var

PS> [Rack]::InstalledRacks.Length
0

PS> [Rack]::PowerOffRacks()

PS> (1..10) | ForEach-Object {
>>   [Rack]::new("Adatum Corporation", "Standard-16",
>>     $_.ToString("Std0000"), 16)
>> } > $null

PS> [Rack]::InstalledRacks.Length
10

PS> [Rack]::InstalledRacks[3]
Brand              Model       AssetId Devices
-----              -----       ------- -------
Adatum Corporation Standard-16 Std0004 {$null, $null, $null, $null...}

PS> [Rack]::PowerOffRacks()
WARNING: Turning off rack: Std0001
WARNING: Turning off rack: Std0002
WARNING: Turning off rack: Std0003
WARNING: Turning off rack: Std0004
WARNING: Turning off rack: Std0005
WARNING: Turning off rack: Std0006
WARNING: Turning off rack: Std0007
WARNING: Turning off rack: Std0008
WARNING: Turning off rack: Std0009
WARNING: Turning off rack: Std0010

Bu örneği her çalıştırdığınızda raf sayısının arttığına dikkat edin.

Özellik doğrulama öznitelikleri

Doğrulama öznitelikleri, özelliklerde verilen değerlerin tanımlanan gereksinimleri karşıladığından test yapmanıza olanak sağlar. Doğrulama, değerin atandığı anda tetiklenir. Bkz. about_functions_advanced_parameters.

Doğrulama özniteliklerini kullanan örnek

class Device {
    [ValidateNotNullOrEmpty()][string]$Brand
    [ValidateNotNullOrEmpty()][string]$Model
}

[Device]$dev = [Device]::new()

Write-Output "Testing dev"
$dev

$dev.Brand = ""
Testing dev

Brand Model
----- -----

Exception setting "Brand": "The argument is null or empty. Provide an
argument that is not null or empty, and then try the command again."
At C:\tmp\Untitled-5.ps1:11 char:1
+ $dev.Brand = ""
+ ~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], SetValueInvocationException
    + FullyQualifiedErrorId : ExceptionWhenSetting

PowerShell sınıflarında devralma

Varolan bir sınıftan türeyen yeni bir sınıf oluşturarak bir sınıfı genişletebilirsiniz. Türetilmiş sınıf, temel sınıfın özelliklerini devralır. Gerektiğinde yöntemleri ve özellikleri ekleyebilir veya geçersiz kılabilirsiniz.

PowerShell birden çok devralmayı desteklemez. Sınıflar birden fazla sınıftan devralamaz. Ancak, arabirimleri bu amaçla kullanabilirsiniz.

Devralma uygulaması işleci tarafından : tanımlanır; yani bu sınıfı genişletmek veya bu arabirimleri uygulamak. Türetilen sınıf her zaman sınıf bildiriminde en soldaki olması gerekir.

Basit devralma söz dizimi kullanma örneği

Bu örnek, basit PowerShell sınıfı devralma söz dizimi gösterir.

Class Derived : Base {...}

Bu örnek, temel sınıftan sonra gelen bir arabirim bildirimi ile devralmayı gösterir.

Class Derived : Base, Interface {...}

PowerShell sınıflarında basit devralma örneği

Bu örnekte, önceki örneklerde kullanılan Raf ve Cihaz sınıfları daha iyi tanımlanmıştır: özellik tekrarlarından kaçının, ortak özellikleri daha iyi hizalar ve ortak iş mantığını yeniden kullanın.

Veri merkezinde yer alan nesnelerin çoğu şirket varlıklarıdır ve bu da onları varlık olarak izlemeye başlamak için mantıklıdır. Cihaz türleri, numaralama DeviceType ile tanımlanır, bkz. about_Enum hakkında ayrıntılı bilgi için bkz.

Örneğimizde, yalnızca ve ; her Rack ComputeServer iki uzantıyı da sınıfa Device tanımlarız.

enum DeviceType {
    Undefined = 0
    Compute = 1
    Storage = 2
    Networking = 4
    Communications = 8
    Power = 16
    Rack = 32
}

class Asset {
    [string]$Brand
    [string]$Model
}

class Device : Asset {
    hidden [DeviceType]$devtype = [DeviceType]::Undefined
    [string]$Status

    [DeviceType] GetDeviceType(){
        return $this.devtype
    }
}

class ComputeServer : Device {
    hidden [DeviceType]$devtype = [DeviceType]::Compute
    [string]$ProcessorIdentifier
    [string]$Hostname
}

class Rack : Device {
    hidden [DeviceType]$devtype = [DeviceType]::Rack
    hidden [int]$Slots = 8

    [string]$Datacenter
    [string]$Location
    [Device[]]$Devices = [Device[]]::new($this.Slots)

    Rack (){
        ## Just create the default rack with 8 slots
    }

    Rack ([int]$s){
        ## Add argument validation logic here
        $this.Devices = [Device[]]::new($s)
    }

    [void] AddDevice([Device]$dev, [int]$slot){
        ## Add argument validation logic here
        $this.Devices[$slot] = $dev
    }

    [void] RemoveDevice([int]$slot){
        ## Add argument validation logic here
        $this.Devices[$slot] = $null
    }
}

$FirstRack = [Rack]::new(16)
$FirstRack.Status = "Operational"
$FirstRack.Datacenter = "PNW"
$FirstRack.Location = "F03R02.J10"

(0..15).ForEach({
    $ComputeServer = [ComputeServer]::new()
    $ComputeServer.Brand = "Fabrikam, Inc."       ## Inherited from Asset
    $ComputeServer.Model = "Fbk5040"              ## Inherited from Asset
    $ComputeServer.Status = "Installed"           ## Inherited from Device
    $ComputeServer.ProcessorIdentifier = "x64"    ## ComputeServer
    $ComputeServer.Hostname = ("r1s" + $_.ToString("000")) ## ComputeServer
    $FirstRack.AddDevice($ComputeServer, $_)
  })

$FirstRack
$FirstRack.Devices
Datacenter : PNW
Location   : F03R02.J10
Devices    : {r1s000, r1s001, r1s002, r1s003...}
Status     : Operational
Brand      :
Model      :

ProcessorIdentifier : x64
Hostname            : r1s000
Status              : Installed
Brand               : Fabrikam, Inc.
Model               : Fbk5040

ProcessorIdentifier : x64
Hostname            : r1s001
Status              : Installed
Brand               : Fabrikam, Inc.
Model               : Fbk5040

<... content truncated here for brevity ...>

ProcessorIdentifier : x64
Hostname            : r1s015
Status              : Installed
Brand               : Fabrikam, Inc.
Model               : Fbk5040

Temel sınıf oluşturucularını çağırma

Bir alt sınıftan temel sınıf oluşturucusu çağırmak için anahtar sözcüğünü base ekleyin.

class Person {
    [int]$Age

    Person([int]$a)
    {
        $this.Age = $a
    }
}

class Child : Person
{
    [string]$School

    Child([int]$a, [string]$s ) : base($a) {
        $this.School = $s
    }
}

[Child]$littleone = [Child]::new(10, "Silver Fir Elementary School")

$littleone.Age

10

Temel sınıf yöntemlerini çağırma

Alt sınıflarda mevcut yöntemleri geçersiz kılmak için, aynı adı ve imzayı kullanarak yöntemleri bildirin.

class BaseClass
{
    [int]days() {return 1}
}
class ChildClass1 : BaseClass
{
    [int]days () {return 2}
}

[ChildClass1]::new().days()

2

Geçersiz kılınan uygulamalardan temel sınıf yöntemlerini çağırarak çağırmada temel sınıfa ([baseclass]$this) atarak.

class BaseClass
{
    [int]days() {return 1}
}
class ChildClass1 : BaseClass
{
    [int]days () {return 2}
    [int]basedays() {return ([BaseClass]$this).days()}
}

[ChildClass1]::new().days()
[ChildClass1]::new().basedays()

2
1

Arabirimlerden devralma

PowerShell sınıfları, temel sınıfları genişletmek için kullanılan devralma söz dizimlerini kullanarak bir arabirim gerçekleştirebilirsiniz. Arabirimler birden çok devralmaya izin olduğundan, arabirim uygulayan bir PowerShell sınıfı, tür adlarını virgül () ile iki nokta ( ) sonrasına ayırarak birden çok : türden , devralabilir. Arabirim uygulayan bir PowerShell sınıfının bu arabirimin tüm üyelerini uygulaması gerekir. Uygulama arabirimi üyelerini yoklama, betikte ayrıştırma zamanı hatasına neden olur.

Not

PowerShell şu anda PowerShell betiğinde yeni arabirimlerin bildirilmalarını desteklemez.

class MyComparable : System.IComparable
{
    [int] CompareTo([object] $obj)
    {
        return 0;
    }
}

class MyComparableBar : bar, System.IComparable
{
    [int] CompareTo([object] $obj)
    {
        return 0;
    }
}

PowerShell modülünden sınıfları içeri aktarma

Import-Module ve deyimi #requires yalnızca modül tarafından tanımlanan modül işlevlerini, diğer adlarını ve değişkenleri içeri aktarın. Sınıflar içe aktarılmaz. deyimi, using module modülde tanımlanan sınıfları içeri aktarıyor. Modül geçerli oturumda yüklenmezse deyimi using başarısız olur. deyimi hakkında daha fazla bilgi using için bkz. about_Using.

deyimi, using module bir betik modülünün veya ikili modülün kök modülünden ( ModuleToProcess ) sınıfları içeri aktarıyor. İç içe modüllerde tanımlanan sınıfları veya modüle nokta kaynaklı betiklerde tanımlanan sınıfları tutarlı bir şekilde içeri aktarmaz. Modül dışındaki kullanıcılar için kullanılabilir olması istediğiniz sınıflar kök modülde tanımlanmalıdır.

Geliştirme sırasında yeni değiştirilen kodu yükleme

Betik modülü geliştirme sırasında kodda değişiklik yapmak ve Force parametresiyle kullanarak modülün yeni sürümünü Import-Module yüklemek yaygın bir durumdur. Bu, yalnızca kök modülde işlevlerde yapılan değişiklikler için çalışır. Import-Module iç içe geçmiş modülleri yeniden yüklemez. Ayrıca, güncelleştirilmiş sınıfları yüklemenin hiçbir yolu yoktur.

En son sürümü çalıştırmayı sağlamak için cmdlet'ini kullanarak modülü Remove-Module kaldırmalısiniz. Remove-Module kök modülünü, tüm iç içe geçmiş modülleri ve modüllerde tanımlanan sınıfları kaldırır. Ardından ve deyimini kullanarak modülü ve sınıfları Import-Module yeniden using module yükabilirsiniz.

Bir diğer yaygın geliştirme uygulaması da kodunuzu farklı dosyalara ayırmaktır. Başka bir modülde tanımlanan sınıfları kullanan bir dosyada işleviniz varsa, işlevlerin gereken sınıf tanımlarını olduğundan emin olmak için using module deyimini kullansanız gerekir.

PSReference türü sınıf üyeleriyle birlikte desteklenmiyor

Tür tür [ref] türlerini sınıf üyesiyle birlikte kullanmak sessizce başarısız olur. Parametreleri kullanan [ref] API'ler sınıf üyeleriyle kullanılamaz. PSReference sınıfı COM nesnelerini destekleyecek şekilde tasarlanmıştır. COM nesnelerinin, başvuruya göre bir değer göndermesi gereken durumlar vardır.

türü hakkında daha fazla [ref] bilgi için bkz. PSReference Sınıfı.

Ayrıca bkz.