Add-Member
Menambahkan properti dan metode kustom ke instans objek PowerShell.
Sintaks
Add-Member
-InputObject <PSObject>
-TypeName <String>
[-PassThru]
[<CommonParameters>]
Add-Member
-InputObject <PSObject>
[-TypeName <String>]
[-Force]
[-PassThru]
[-NotePropertyMembers] <IDictionary>
[<CommonParameters>]
Add-Member
-InputObject <PSObject>
[-TypeName <String>]
[-Force]
[-PassThru]
[-NotePropertyName] <String>
[-NotePropertyValue] <Object>
[<CommonParameters>]
Add-Member
-InputObject <PSObject>
[-MemberType] <PSMemberTypes>
[-Name] <String>
[[-Value] <Object>]
[[-SecondValue] <Object>]
[-TypeName <String>]
[-Force]
[-PassThru]
[<CommonParameters>]
Deskripsi
Add-Member
Cmdlet memungkinkan Anda menambahkan anggota (properti dan metode) ke instans objek PowerShell. Misalnya, Anda dapat menambahkan anggota NoteProperty yang berisi deskripsi objek atau anggota ScriptMethod yang menjalankan skrip untuk mengubah objek.
Untuk menggunakan Add-Member
, pipa objek ke Add-Member
, atau gunakan parameter InputObject untuk menentukan objek.
Parameter MemberType menunjukkan jenis anggota yang ingin Anda tambahkan. Parameter Nama menetapkan nama untuk anggota baru, dan parameter Nilai menetapkan nilai anggota.
Properti dan metode yang Anda tambahkan hanya ditambahkan ke instans objek tertentu yang Anda tentukan. Add-Member
tidak mengubah jenis objek. Untuk membuat jenis objek baru, gunakan Add-Type
cmdlet .
Anda juga dapat menggunakan Export-Clixml
cmdlet untuk menyimpan instans objek, termasuk anggota tambahan, dalam file. Kemudian Anda dapat menggunakan Import-Clixml
cmdlet untuk membuat ulang instans objek dari informasi yang disimpan dalam file yang diekspor.
Dimulai di Windows PowerShell 3.0, Add-Member
memiliki fitur baru yang memudahkan untuk menambahkan properti catatan ke objek. Anda dapat menggunakan parameter NotePropertyName dan NotePropertyValue untuk menentukan properti catatan atau menggunakan parameter NotePropertyMembers , yang mengambil tabel hash nama dan nilai properti catatan.
Selain itu, dimulai di Windows PowerShell 3.0, parameter PassThru , yang menghasilkan objek output, diperlukan lebih jarang. Add-Member
sekarang menambahkan anggota baru langsung ke objek input dari lebih banyak jenis. Untuk informasi selengkapnya, lihat deskripsi parameter PassThru .
Contoh
Contoh 1: Menambahkan properti catatan ke PSObject
Contoh berikut menambahkan properti Catatan status dengan nilai "Selesai" ke objek FileInfo yang mewakili Test.txt
file.
Perintah pertama menggunakan Get-ChildItem
cmdlet untuk mendapatkan objek FileInfo yang mewakili Test.txt
file. Ini menyimpannya dalam $a
variabel.
Perintah kedua menambahkan properti catatan ke objek di $a
.
Perintah ketiga menggunakan notasi titik untuk mendapatkan nilai properti Status objek di $a
. Seperti yang ditunjukkan oleh output, nilainya adalah Done
.
$A = Get-ChildItem c:\ps-test\test.txt
$A | Add-Member -NotePropertyName Status -NotePropertyValue Done
$A.Status
Done
Contoh 2: Menambahkan properti alias ke PSObject
Contoh berikut menambahkan properti Alias ukuran ke objek yang mewakili Test.txt
file. Properti baru adalah alias untuk properti Panjang .
Perintah pertama menggunakan Get-ChildItem
cmdlet untuk mendapatkan Test.txt
objek FileInfo .
Perintah kedua menambahkan properti Alias ukuran . Perintah ketiga menggunakan notasi titik untuk mendapatkan nilai properti Ukuran baru.
$A = Get-ChildItem C:\Temp\test.txt
$A | Add-Member -MemberType AliasProperty -Name Size -Value Length
$A.Size
2394
Contoh 3: Menambahkan properti catatan StringUse ke string
Contoh ini menambahkan properti catatan StringUse ke string. Karena Add-Member
tidak dapat menambahkan jenis ke objek input String , Anda dapat menentukan parameter PassThru untuk menghasilkan objek output. Perintah terakhir dalam contoh menampilkan properti baru.
Contoh ini menggunakan parameter NotePropertyMembers . Nilai parameter NotePropertyMembers adalah tabel hash. Kuncinya adalah nama properti catatan, StringUse, dan nilainya adalah nilai properti catatan, Tampilan.
$A = "A string"
$A = $A | Add-Member -NotePropertyMembers @{StringUse="Display"} -PassThru
$A.StringUse
Display
Contoh 4: Menambahkan metode skrip ke objek FileInfo
Contoh ini menambahkan metode skrip SizeInMB ke objek FileInfo yang menghitung ukuran file ke MegaByte terdekat. Perintah kedua membuat ScriptBlock yang menggunakan metode statis Round dari [math]
jenis untuk membulatkan ukuran file ke tempat desimal kedua.
Parameter Nilai juga menggunakan $This
variabel otomatis, yang mewakili objek saat ini. Variabel $This
hanya valid dalam blok skrip yang menentukan properti dan metode baru.
Perintah terakhir menggunakan notasi titik untuk memanggil metode skrip SizeInMB baru pada objek dalam $A
variabel.
$A = Get-ChildItem C:\Temp\test.txt
$S = {[math]::Round(($this.Length / 1MB), 2)}
$A | Add-Member -MemberType ScriptMethod -Name "SizeInMB" -Value $S
$A.SizeInMB()
0.43
Contoh 5: Membuat objek kustom
Contoh ini membuat objek kustom Aset.
New-Object
Cmdlet membuat PSObject yang disimpan dalam $Asset
variabel. Akselerator [ordered]
jenis membuat kamus yang diurutkan yang disimpan dalam $d
variabel.
Piping $Asset
untuk Add-Member
menambahkan pasangan kunci-nilai dalam kamus ke objek sebagai anggota NoteProperty . Parameter TypeName menetapkan jenis Asset
ke PSObject. Get-Member
Cmdlet menunjukkan jenis dan properti objek. Namun, properti tercantum dalam urutan alfabet, bukan dalam urutan yang ditambahkan.
$Asset = New-Object -TypeName PSObject
$d = [ordered]@{Name="Server30"; System="Server Core"; PSVersion="4.0"}
$Asset | Add-Member -NotePropertyMembers $d -TypeName Asset
$Asset | Get-Member -MemberType Properties
TypeName: Asset
Name MemberType Definition
---- ---------- ----------
Name NoteProperty string Name=Server30
PSVersion NoteProperty string PSVersion=4.0
System NoteProperty string System=Server Core
$Asset.PSObject.Properties | Format-Table Name, MemberType, TypeNameOfValue, Value
Name MemberType TypeNameOfValue Value
---- ---------- --------------- -----
Name NoteProperty System.String Server30
System NoteProperty System.String Server Core
PSVersion NoteProperty System.String 4.0
Memeriksa daftar mentah properti memperlihatkan properti dalam urutan ditambahkan ke objek. Format-Table
digunakan dalam contoh ini untuk membuat output yang mirip Get-Member
dengan .
Contoh 6: Menambahkan AliasProperty ke objek
Dalam contoh ini kita membuat objek kustom yang berisi dua anggota NoteProperty . Jenis untuk NoteProperty mencerminkan jenis nilai yang disimpan dalam properti . Dalam hal ini, properti Usia adalah string.
PS> $obj = [pscustomobject]@{
Name = 'Doris'
Age = '20'
}
PS> $obj | Add-Member -MemberType AliasProperty -Name 'intAge' -Value age -SecondValue uint32
PS> $obj | Get-Member
TypeName: System.Management.Automation.PSCustomObject
Name MemberType Definition
---- ---------- ----------
intAge AliasProperty intAge = (System.UInt32)age
Equals Method bool Equals(System.Object obj)
GetHashCode Method int GetHashCode()
GetType Method type GetType()
ToString Method string ToString()
Age NoteProperty string Age=20
Name NoteProperty string Name=Doris
PS> $obj
Name Age intAge
---- --- ------
Doris 20 20
PS> $obj.Age + 1
201
PS> $obj.intAge + 1
21
Properti intAge adalah AliasProperty untuk properti Usia, tetapi jenisnya dijamin uint32.
Contoh 7: Menambahkan metode dapatkan dan atur ke objek kustom
Contoh ini menunjukkan cara menentukan metode Dapatkan dan Atur yang mengakses properti berlapis dalam.
$user = [pscustomobject]@{
Name = 'User1'
Age = 29
StartDate = [datetime]'2019-05-05'
Position = [pscustomobject]@{
DepartmentName = 'IT'
Role = 'Manager'
}
}
$addMemberSplat = @{
MemberType = 'ScriptProperty'
Name = 'Title'
Value = { $this.Position.Role } # getter
SecondValue = { $this.Position.Role = $args[0] } # setter
}
$user | Add-Member @addMemberSplat
$user | 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()
Age NoteProperty int Age=29
Name NoteProperty string Name=User1
Position NoteProperty System.Management.Automation.PSCustomObject Position=@{DepartmentName=IT; Role=Manager}
StartDate NoteProperty datetime StartDate=5/5/2019 12:00:00 AM
Title ScriptProperty System.Object Title {get= $this.Position.Role ;set= $this.Position.Role = $args[0] ;}
$user.Title = 'Dev Manager'
Name : User1
Age : 29
StartDate : 5/5/2019 12:00:00 AM
Position : @{DepartmentName=IT; Role=Dev Manager}
Title : Dev Manager
Perhatikan bahwa properti Judul adalah ScriptProperty yang memiliki metode Get and Set . Saat kita menetapkan nilai baru ke properti Judul , metode Set dipanggil dan mengubah nilai properti Peran di properti Posisi .
Parameter
-Force
Secara default, Add-Member
tidak dapat menambahkan anggota baru jika objek sudah memiliki anggota dengan yang sama.
Saat Anda menggunakan parameter Paksa , Add-Member
mengganti anggota yang ada dengan anggota baru.
Anda tidak dapat menggunakan parameter Paksa untuk mengganti anggota standar dari jenis.
Jenis: | SwitchParameter |
Position: | Named |
Nilai default: | None |
Diperlukan: | False |
Terima input alur: | False |
Terima karakter wildcard: | False |
-InputObject
Menentukan objek tempat anggota baru ditambahkan. Masukkan variabel yang berisi objek, atau ketik perintah atau ekspresi yang mendapatkan objek.
Jenis: | PSObject |
Position: | Named |
Nilai default: | None |
Diperlukan: | True |
Terima input alur: | True |
Terima karakter wildcard: | False |
-MemberType
Menentukan tipe anggota yang akan ditambahkan. Parameter ini diperlukan. Nilai yang dapat diterima untuk parameter ini adalah:
- AliasProperty
- CodeMethod
- CodeProperty
- NoteProperty
- ScriptMethod
- ScriptProperty
Untuk informasi tentang nilai-nilai ini, lihat Enumerasi PSMemberTypes di PowerShell SDK.
Tidak semua objek memiliki setiap jenis anggota. Jika Anda menentukan jenis anggota yang tidak dimiliki objek, PowerShell mengembalikan kesalahan.
Jenis: | PSMemberTypes |
Alias: | Type |
Nilai yang diterima: | AliasProperty, CodeMethod, CodeProperty, NoteProperty, ScriptMethod, ScriptProperty |
Position: | 0 |
Nilai default: | None |
Diperlukan: | True |
Terima input alur: | False |
Terima karakter wildcard: | False |
-Name
Menentukan nama anggota yang ditambahkan cmdlet ini.
Jenis: | String |
Position: | 1 |
Nilai default: | None |
Diperlukan: | True |
Terima input alur: | False |
Terima karakter wildcard: | False |
-NotePropertyMembers
Menentukan kamus hashtable atau diurutkan yang berisi pasangan kunci-nilai yang mewakili nama NoteProperty dan nilainya. Untuk informasi selengkapnya tentang tabel hash dan kamus yang diurutkan di PowerShell, lihat about_Hash_Tables.
Parameter ini diperkenalkan di Windows PowerShell 3.0.
Jenis: | IDictionary |
Position: | 0 |
Nilai default: | None |
Diperlukan: | True |
Terima input alur: | False |
Terima karakter wildcard: | False |
-NotePropertyName
Menentukan nama properti catatan.
Gunakan parameter ini dengan parameter NotePropertyValue . Parameter ini bersifat opsional.
Parameter ini diperkenalkan di Windows PowerShell 3.0.
Jenis: | String |
Position: | 0 |
Nilai default: | None |
Diperlukan: | True |
Terima input alur: | False |
Terima karakter wildcard: | False |
-NotePropertyValue
Menentukan nilai properti catatan.
Gunakan parameter ini dengan parameter NotePropertyName . Parameter ini bersifat opsional.
Parameter ini diperkenalkan di Windows PowerShell 3.0.
Jenis: | Object |
Position: | 1 |
Nilai default: | None |
Diperlukan: | True |
Terima input alur: | False |
Terima karakter wildcard: | False |
-PassThru
Mengembalikan objek yang mewakili item tempat Anda bekerja. Secara default, cmdlet ini tidak menghasilkan output apa pun.
Untuk sebagian besar objek, Add-Member
menambahkan anggota baru ke objek input. Namun, ketika objek input adalah string, Add-Member
tidak dapat menambahkan anggota ke objek input. Untuk objek ini, gunakan parameter PassThru untuk membuat objek output.
Di Windows PowerShell 2.0, Add-Member
menambahkan anggota hanya ke pembungkus objek PSObject , bukan ke objek. Gunakan parameter PassThru untuk membuat objek output untuk objek apa pun yang memiliki pembungkus PSObject.
Jenis: | SwitchParameter |
Position: | Named |
Nilai default: | None |
Diperlukan: | False |
Terima input alur: | False |
Terima karakter wildcard: | False |
-SecondValue
Menentukan informasi tambahan opsional tentang anggota AliasProperty, ScriptProperty, atau CodeProperty .
Jika digunakan saat menambahkan AliasProperty, parameter ini harus berupa jenis data. Konversi ke jenis data yang ditentukan ditambahkan ke nilai AliasProperty. Misalnya, jika Anda menambahkan AliasProperty yang menyediakan nama alternatif untuk properti string, Anda juga dapat menentukan parameter SecondValue System.Int32 untuk menunjukkan bahwa nilai properti string tersebut harus dikonversi ke bilangan bulat saat diakses menggunakan AliasProperty yang sesuai.
Untuk CodeProperty, nilai harus menjadi referensi ke metode yang mengimplementasikan aksesor Set. GetMethod()
Gunakan metode referensi jenis untuk mendapatkan referensi ke metode . Metode harus mengambil satu parameter yang merupakan PSObject. Aksesor Dapatkan ditetapkan menggunakan parameter Nilai.
Untuk ScriptProperty, nilai harus berupa blok skrip yang mengimplementasikan aksesor Set. Aksesor Dapatkan ditetapkan menggunakan parameter Nilai.
Jenis: | Object |
Position: | 3 |
Nilai default: | None |
Diperlukan: | False |
Terima input alur: | False |
Terima karakter wildcard: | False |
-TypeName
Menentukan nama untuk jenis tersebut.
Ketika jenis adalah kelas di namespace layanan Sistem atau jenis yang memiliki akselerator jenis, Anda dapat memasukkan nama pendek jenis. Jika tidak, nama jenis lengkap diperlukan. Parameter ini hanya efektif ketika InputObject adalah PSObject.
Parameter ini diperkenalkan di Windows PowerShell 3.0.
Jenis: | String |
Position: | Named |
Nilai default: | None |
Diperlukan: | False |
Terima input alur: | False |
Terima karakter wildcard: | False |
-Value
Menentukan nilai awal anggota yang ditambahkan. Jika Anda menambahkan anggota AliasProperty, CodeProperty, atau ScriptProperty , Anda dapat memberikan informasi tambahan menggunakan parameter SecondValue .
- Untuk AliasProperty, nilai harus berupa nama properti yang sedang di-alias.
- Untuk CodeMethod, nilai harus menjadi referensi ke metode .
GetMethod()
Gunakan metode referensi jenis untuk mendapatkan referensi ke metode . - Untuk CodeProperty, nilai harus menjadi referensi ke metode yang mengimplementasikan aksesor Get.
GetMethod()
Gunakan metode referensi jenis untuk mendapatkan referensi ke metode . referensi. Metode harus mengambil satu parameter yang merupakan PSObject. Aksesor Set ditetapkan menggunakan parameter SecondValue. - Untuk ScriptMethod, nilainya harus berupa blok skrip.
- Untuk ScriptProperty, nilainya harus berupa blok skrip yang mengimplementasikan aksesor Get. Aksesor Set ditetapkan menggunakan parameter SecondValue.
Jenis: | Object |
Position: | 2 |
Nilai default: | None |
Diperlukan: | False |
Terima input alur: | False |
Terima karakter wildcard: | False |
Input
Anda dapat menyalurkan objek apa pun ke cmdlet ini.
Output
None
Secara default, cmdlet ini tidak mengembalikan output.
Saat Anda menggunakan parameter PassThru , cmdlet ini mengembalikan objek yang baru diperluas.
Catatan
Anda hanya dapat menambahkan anggota ke objek jenis PSObject . Untuk menentukan apakah objek adalah objek PSObject , gunakan -is
operator . Misalnya, untuk menguji objek yang disimpan dalam $obj
variabel, ketik $obj -is [psobject]
.
Objek jenis PSObject mempertahankan daftar anggota mereka dalam urutan anggota ditambahkan ke objek.
Nama parameter MemberType, Name, Value, dan SecondValue bersifat opsional. Jika Anda menghilangkan nama parameter, nilai parameter yang tidak disebutkan namanya harus muncul dalam urutan ini: MemberType, Name, Value, dan SecondValue.
Jika Anda menyertakan nama parameter, parameter dapat muncul dalam urutan apa pun.
Anda dapat menggunakan $this
variabel otomatis dalam blok skrip yang menentukan nilai properti dan metode baru. Variabel $this
mengacu pada instans objek tempat properti dan metode ditambahkan. Untuk informasi selengkapnya tentang variabel, $this
lihat about_Automatic_Variables.