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.txtobjek 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-Memberdengan .

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.

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-InputObject

Menentukan objek tempat anggota baru ditambahkan. Masukkan variabel yang berisi objek, atau ketik perintah atau ekspresi yang mendapatkan objek.

Type:PSObject
Position:Named
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters: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.

Type:PSMemberTypes
Aliases:Type
Accepted values:AliasProperty, CodeMethod, CodeProperty, NoteProperty, ScriptMethod, ScriptProperty
Position:0
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-Name

Menentukan nama anggota yang ditambahkan cmdlet ini.

Type:String
Position:1
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters: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.

Type:IDictionary
Position:0
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-NotePropertyName

Menentukan nama properti catatan.

Gunakan parameter ini dengan parameter NotePropertyValue . Parameter ini bersifat opsional.

Parameter ini diperkenalkan di Windows PowerShell 3.0.

Type:String
Position:0
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-NotePropertyValue

Menentukan nilai properti catatan.

Gunakan parameter ini dengan parameter NotePropertyName . Parameter ini bersifat opsional.

Parameter ini diperkenalkan di Windows PowerShell 3.0.

Type:Object
Position:1
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters: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.

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters: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.Int32untuk 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.

Type:Object
Position:3
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters: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.

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters: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.
Type:Object
Position:2
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

Input

PSObject

Anda dapat menyalurkan objek apa pun ke cmdlet ini.

Output

None

Secara default, cmdlet ini tidak mengembalikan output.

Object

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.