about_PSCustomObject

Deskripsi singkat

Menjelaskan perbedaan antara PSObject dan PSCustomObject.

Deskripsi panjang

Akselerator [pscustomobject] jenis ditambahkan di PowerShell 4.0.

Sebelum menambahkan akselerator jenis ini, membuat objek dengan properti anggota dan nilai lebih rumit. Awalnya, Anda harus menggunakan New-Object untuk membuat objek dan Add-Member menambahkan properti. Contohnya:

PS> $object1 = New-Object -TypeName psobject
PS> Add-Member -InputObject $object1 -MemberType NoteProperty -Name one -Value 1
PS> Add-Member -InputObject $object1 -MemberType NoteProperty -Name two -Value 2
PS> $object1 | Get-Member

   TypeName: System.Management.Automation.PSCustomObject

Name        MemberType   Definition
----        ----------   ----------
Equals      Method       bool Equals(System.Object obj)
GetHashCode Method       int GetHashCode()
GetType     Method       type GetType()
ToString    Method       string ToString()
one         NoteProperty int one=1
two         NoteProperty int two=2

PS> $object1

one two
--- ---
  1   2

Nantinya, Anda dapat menggunakan parameter Properti untuk New-Object meneruskan Hashtable yang berisi anggota dan nilai. Contohnya:

PS> $object2 = New-Object -TypeName psobject -Property @{one=1; two=2}
PS> $object2 | Get-Member

   TypeName: System.Management.Automation.PSCustomObject

Name        MemberType   Definition
----        ----------   ----------
Equals      Method       bool Equals(System.Object obj)
GetHashCode Method       int GetHashCode()
GetType     Method       type GetType()
ToString    Method       string ToString()
one         NoteProperty int one=1
two         NoteProperty int two=2

PS> $object2

one two
--- ---
  1   2

Sejak PowerShell 3.0, mentransmisikan Hashtable untuk [pscustomobject] mencapai hasil yang sama.

PS> $object3 = [pscustomobject]@{one=1; two=2}
PS> $object3 | Get-Member

   TypeName: System.Management.Automation.PSCustomObject

Name        MemberType   Definition
----        ----------   ----------
Equals      Method       bool Equals(System.Object obj)
GetHashCode Method       int GetHashCode()
GetType     Method       type GetType()
ToString    Method       string ToString()
one         NoteProperty int one=1
two         NoteProperty int two=2

PS> $object3

one two
--- ---
  1   2

Memahami jenis akselerator

[psobject] dan [pscustomobject] merupakan jenis akselerator.

Untuk informasi selengkapnya, lihat about_Type_Accelerators.

Meskipun Anda mungkin berpikir bahwa [pscustomobject] harus memetakan ke System.Management.Automation.PSCustomObject, jenisnya berbeda.

PS> [pscustomobject] -eq [System.Management.Automation.PSCustomObject]
False

Kedua jenis akselerator dipetakan ke kelas yang sama, PSObject:

PS> [pscustomobject]

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     PSObject                                 System.Object

PS> [psobject]

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     PSObject                                 System.Object

[pscustomobject] Ketika akselerator jenis ditambahkan, itu termasuk kode tambahan untuk menangani konversi objek Hashtable. Kode tambahan ini hanya dipanggil ketika objek baru sedang dibuat. Oleh karena itu, Anda tidak dapat menggunakan [pscustomobject] untuk koersi jenis atau perbandingan jenis, karena semua objek diperlakukan sebagai jenis PSObject .

Misalnya, menggunakan -is operator untuk memeriksa apakah objek yang dikembalikan oleh cmdlet [pscustomobject] sama dengan membandingkannya [psobject]dengan .

PS> (Get-Item /) -is [pscustomobject]
True

PS> (Get-Item /) -is [psobject]
True

Saat Anda melemparkan objek apa pun ke [psobject] Anda mendapatkan jenis objek asli. Oleh karena itu, transmisi apa pun selain Hashtable untuk [pscustomobject] menghasilkan jenis yang sama.

PS> ([PSObject]@{Property = 'Value'}).GetType().FullName
System.Collections.Hashtable

PS> ([pscustomobject]123).GetType().Name
Int32

PS> ([PSCustomObject]@{Property = 'Value'}).GetType().FullName
System.Management.Automation.PSCustomObject

Lihat juga