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 Force get-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

    psbaseMemberSet berisi anggota objek dasar tanpa ekstensi atau adaptasi. Tergantung pada jenis objek, itu adalah instans .NET yang dibungkus oleh [psobject] instans atau, jika tidak ada pembungkus, itu adalah objek input itu sendiri.

  • psadapted

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

  • psextended

    psextendedMemberSethanya menampilkan anggota yang ditambahkan oleh file Type.ps1xml dan cmdlet Add-Member. Objek apa pun dapat diperluas saat runtime menggunakan Add-Member cmdlet.

  • psobject

    psobjectMemberSet sumber refleksi yang kaya untuk objek apa pun yang mencakup metode, properti, dan informasi lainnya tentang objek.

Contoh

Untuk contoh ini, $hash adalah hashtable yang berisi informasi tentang pengguna. Parameter Get-Member Force 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 psextendeddari MemberSet.

$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

pstypenamesCodeProperty mencantumkan hierarki jenis objek dalam urutan pewarisan. Contohnya:

$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 Get-Member -Force perintah 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

Properti Jumlah dan Panjang tersedia untuk semua objek PowerShell, bukan hanya koleksi. Ini mirip satu sama lain tetapi dapat bekerja secara berbeda tergantung pada jenis data. Misalnya, Panjang string adalah jumlah karakter dalam string. Properti Hitung adalah jumlah instans objek.

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

Untuk informasi selengkapnya tentang properti ini, lihat about_Properties.

Jenis skalar 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 jenis

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

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

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

Untuk informasi selengkapnya, lihat about_Classes.