Bagikan melalui


Tentang anggota intrinsik

Deskripsi singkat

Menyediakan informasi tentang anggota intrinsik PowerShell yang tersedia untuk semua objek PowerShell.

Deskripsi terperinci

Saat objek dibuat, PowerShell menambahkan beberapa properti dan metode "tersembunyi" ke setiap objek. Properti dan metode ini dikenal sebagai anggota intrinsik . Anggota intrinsik ini biasanya tersembunyi dari tampilan. Anggota tersembunyi ini dapat dilihat menggunakan parameter ForceGet-Member.

Tampilan objek

Anggota intrinsik menyertakan sekumpulan properti MemberSet yang mewakili tampilan objek. Untuk informasi selengkapnya tentang properti MemberSet, lihat PSMemberSet.

Setiap objek PowerShell menyertakan properti berikut.

  • psbase

    MemberSet berisi anggota-anggota dari objek dasar tanpa tambahan atau penyesuaian. Tergantung pada jenis objek, itu adalah instans .NET yang dibungkus oleh instans [psobject] atau, jika tidak ada pembungkus, itu adalah objek input itu sendiri.

  • psadapted

    MemberSet menunjukkan objek dasar ditambah anggota yang diadaptasi, jika ada. Anggota yang diadaptasi ditambahkan oleh Extended Type System (ETS).

  • psextended

    MemberSethanya menunjukkan anggota yang ditambahkan oleh file Type.ps1xml dan cmdlet Add-Member . Objek apa pun dapat diperluas pada runtime menggunakan cmdlet Add-Member.

  • psobject

    psobject MemberSet adalah sumber refleksi yang kaya untuk segala objek yang mencakup metode, properti, dan informasi lainnya tentang objek tersebut.

Contoh

Untuk contoh ini, $hash adalah hashtable yang berisi informasi tentang pengguna. Parameter ForceGet-Member menunjukkan kepada kita anggota intrinsik objek.

$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…

Menggunakan psobject mirip dengan menggunakan Get-Member, tetapi memberikan lebih banyak fleksibilitas. Misalnya, Anda dapat menghitung properti objek dan nilainya.

$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

Bandingkan dengan objek yang dibuat dengan mengonversi hashtable ke PSCustomObject.

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

Perhatikan bahwa kunci dari hashtable telah dikonversi ke properti di PSCustomObject. Properti baru sekarang menjadi bagian dari psextendedMemberSet.

$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…

Ketik informasi

pstypenames CodeProperty mencantumkan hierarki jenis objek dalam urutan pewarisan. Misalnya:

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

Output dimulai dengan jenis objek yang paling spesifik, System.IO.FileInfo, dan berlanjut ke jenis yang paling umum, System.Object.

Metode

PowerShell menambahkan dua metode tersembunyi ke semua objek PowerShell. Metode ini tidak terlihat menggunakan perintah Get-Member -Force atau penyelesaian tab.

ForEach() dan Where()

Metode ForEach() dan Where() tersedia untuk semua objek PowerShell. Namun, mereka paling berguna saat bekerja dengan koleksi. Untuk informasi selengkapnya tentang cara menggunakan metode ini, lihat about_Arrays.

Properti

Tidak semua jenis skalar memiliki properti Count atau Length dalam jenis dasar. PowerShell menambahkan properti yang hilang sebagai anggota intrinsik untuk semua jenis skalar.

Nota

Variabel yang tidak diinisialisasi secara implisit $null. bersifat skalar dan memiliki Hitungan intrinsik dan Panjang 0.

Meskipun properti Count dan Length serupa, properti tersebut mungkin bekerja secara berbeda tergantung pada jenis data. Misalnya, Panjang string adalah jumlah karakter dalam string. Properti Count adalah jumlah instance dari objek.

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

Untuk informasi selengkapnya tentang properti ini, lihat about_Properties.

Tipe skalar untuk pengindeksan array

Saat objek bukan koleksi terindeks, menggunakan operator indeks untuk mengakses elemen pertama mengembalikan objek itu sendiri. Nilai indeks di luar elemen pertama mengembalikan $null.

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

Untuk informasi selengkapnya, lihat about_Operators.

Metode New() untuk tipe

Dimulai di PowerShell 5.0, PowerShell menambahkan metode new() statis untuk semua jenis .NET. Contoh berikut menghasilkan hasil yang sama.

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

Menggunakan metode new() berkinerja lebih baik daripada menggunakan New-Object.

Untuk informasi selengkapnya, lihat about_Classes.