İç üyeler hakkında

Kısa açıklama

Tüm PowerShell nesneleri tarafından kullanılabilen PowerShell'in iç üyeleri hakkında bilgi sağlar.

Uzun açıklama

Nesneler oluşturulduğunda, PowerShell her nesneye bazı "gizli" özellikler ve yöntemler ekler. Bu özellikler ve yöntemler, özgün üyeler olarak bilinir. Bu iç üyeler normalde görünümden gizlenir. Bu gizli üyeler, Force parametresi kullanılarak Get-Memberile görülebilir.

Nesne görünümleri

İç üyeler, nesnenin görünümünü temsil eden bir MemberSet özellikleri kümesi içerir. MemberSet özellikleri hakkında daha fazla bilgi için bkz. PSMemberSet.

Her PowerShell nesnesi aşağıdaki özellikleri içerir.

  • psbase

    psbase MemberSet, uzantı veya uyarlama olmadan temel nesnenin üyelerini içerir. Nesne türüne bağlı olarak, bir [psobject] örneği tarafından sarmalanmış bir .NET nesnesi örneği olabilir veya sarmalayıcı yoksa giriş nesnesinin kendisi olabilir.

  • psadapted

    psadapted MemberSet, varsa temel nesneyi ve uyarlanmış üyeleri gösterir. Uyarlanan üyeler Genişletilmiş Tür Sistemi (ETS) tarafından eklenir.

  • psextended

    psextended MemberSetyalnızcaTypes.ps1xml dosyaları tarafından eklenen üyeleri ve Add-Member cmdlet'ini gösterir. Herhangi bir nesne çalışma zamanında Add-Member cmdlet'i kullanılarak genişletilebilir.

  • psobject

    psobject MemberSet, yöntemler, özellikler ve nesne hakkındaki diğer bilgileri içeren herhangi bir nesne için zengin bir yansıma kaynağıdır.

Örnekler

Bu örnekte, $hash bir kullanıcı hakkında bilgi içeren bir karma tablodur. Get-Member parametresi, nesnenin iç üyelerini gösterir.

$hash = @{
    Age  = 33
    Name = 'Bob'
}

$hash | Get-Member -Force -MemberType MemberSet, CodeProperty
   TypeName: System.Collections.Hashtable

Name        MemberType   Definition
----        ----------   ----------
pstypenames CodeProperty System.Collections.ObjectModel.Collection`1[[System.String, System.Private.CoreLib, Version=7…
psadapted   MemberSet    psadapted {Item, IsReadOnly, IsFixedSize, IsSynchronized, Keys, Values, SyncRoot, Count, Add,…
psbase      MemberSet    psbase {Item, IsReadOnly, IsFixedSize, IsSynchronized, Keys, Values, SyncRoot, Count, Add, Cl…
psextended  MemberSet    psextended {}
psobject    MemberSet    psobject {Members, Properties, Methods, ImmediateBaseObject, BaseObject, TypeNames, get_Membe…

psobject kullanmak, Get-Memberkullanmaya benzer, ancak daha fazla esneklik sağlar. Örneğin, bir nesnenin özelliklerini ve değerlerini numaralandırabilirsiniz.

$hash.psobject.Properties | Select-Object Name, MemberType, Value
Name           MemberType                    Value
----           ----------                    -----
IsReadOnly       Property                    False
IsFixedSize      Property                    False
IsSynchronized   Property                    False
Keys             Property              {Age, Name}
Values           Property                {33, Bob}
SyncRoot         Property {[Age, 33], [Name, Bob]}
Count            Property                        2

Bunu, karma tablo PSCustomObjectdönüştürerek oluşturulan nesneyle karşılaştırın.

$user = [pscustomobject]$hash
$user.psobject.Properties | Select-Object Name, MemberType, Value
Name   MemberType Value
----   ---------- -----
Age  NoteProperty    33
Name NoteProperty   Bob

Karma tablodaki anahtarların PSCustomObjectözelliklerine dönüştürüldüğüne dikkat edin. Yeni özellikler artık psextendedMemberSetöğesinin bir parçasıdır.

$user | Get-Member -Force -MemberType MemberSet, CodeProperty
   TypeName: System.Management.Automation.PSCustomObject

Name        MemberType   Definition
----        ----------   ----------
pstypenames CodeProperty System.Collections.ObjectModel.Collection`1[[System.String, System.Private.CoreLib, Version=7…
psadapted   MemberSet    psadapted {ToString, GetType, Equals, GetHashCode}
psbase      MemberSet    psbase {ToString, GetType, Equals, GetHashCode}
psextended  MemberSet    psextended {Age, Name}
psobject    MemberSet    psobject {Members, Properties, Methods, ImmediateBaseObject, BaseObject, TypeNames, get_Membe…

Tür bilgileri

pstypenames CodeProperty devralma sırasına göre nesne türü hiyerarşisini listeler. Mesela:

$file = Get-Item C:\temp\test.txt
$file.pstypenames
System.IO.FileInfo
System.IO.FileSystemInfo
System.MarshalByRefObject
System.Object

Çıktı, en özel nesne türü System.IO.FileInfoile başlar ve en genel tür System.Object'e kadar devam eder.

Methods

PowerShell, tüm PowerShell nesnelerine iki gizli yöntem ekler. Bu yöntemler Get-Member -Force komutu veya sekme tamamlama kullanılarak görünmez.

ForEach() ve Where()

ForEach() ve Where() yöntemleri tüm PowerShell nesneleri tarafından kullanılabilir. Ancak, koleksiyonlarla çalışırken en kullanışlı olanlardır. Bu yöntemleri kullanma hakkında daha fazla bilgi için bkz. about_Arrays.

Özellikler

Tüm skaler türlerde temel türdeki Sayısı veya Uzunluğu özellikleri yoktur. PowerShell, eksik özelliği tüm skaler türler için iç üye olarak ekler.

Not

Başlatılmamış değişkenler otomatik olarak $nullşeklinde tanımlanır. $null skaler ve kendisine ait Sayısı ve Uzunluğu 0'dır.

Sayısı ve Uzunluğu özellikleri benzer olsa da, veri türüne bağlı olarak farklı çalışabilirler. Örneğin, bir dizenin Uzunluğu dizedeki karakter sayısıdır. Count özelliği, nesnenin örnek sayısıdır.

PS> $str = 'string'
PS> $str.Length
6
PS> $str.Count
1

Bu özellikler hakkında daha fazla bilgi için bkz. about_Properties.

Dizi dizinleme skaler türleri

Bir nesne dizine alınan bir koleksiyon olmadığında, ilk öğeye erişmek için dizin işlecini kullanmak nesnenin kendisini döndürür. İlk öğenin dışındaki dizin değerleri $nulldöndürür.

PS> (2)[0]
2
PS> (2)[-1]
2
PS> (2)[1] -eq $null
True
PS> (2)[0,0] -eq $null
True

Daha fazla bilgi için bkz. about_Operators.

new() türler için yöntem

PowerShell 5.0 sürümünden başlayarak, PowerShell tüm .NET türleri için statik bir new() yöntemi ekler. Aşağıdaki örneklerde aynı sonuç elde edilmektedir.

$expression = New-Object -TypeName regex -ArgumentList 'pattern'
$expression = [regex]::new('pattern')

new() yönteminin kullanılması, New-Objectkullanmaktan daha iyi performans gösterir.

Daha fazla bilgi için bkz. about_Classes.