Bagikan melalui


Add-Member

Menambahkan properti dan metode kustom ke instans objek PowerShell.

Sintaks

TypeNameSet (Default)

Add-Member
    -InputObject <PSObject>
    -TypeName <String>
    [-PassThru]
    [<CommonParameters>]

NotePropertyMultiMemberSet

Add-Member
    [-NotePropertyMembers] <IDictionary>
    -InputObject <PSObject>
    [-TypeName <String>]
    [-Force]
    [-PassThru]
    [<CommonParameters>]

NotePropertySingleMemberSet

Add-Member
    [-NotePropertyName] <String>
    [-NotePropertyValue] <Object>
    -InputObject <PSObject>
    [-TypeName <String>]
    [-Force]
    [-PassThru]
    [<CommonParameters>]

MemberSet

Add-Member
    [-MemberType] <PSMemberTypes>
    [-Name] <String>
    [[-Value] <Object>]
    [[-SecondValue] <Object>]
    -InputObject <PSObject>
    [-TypeName <String>]
    [-Force]
    [-PassThru]
    [<CommonParameters>]

Deskripsi

Cmdlet Add-Member 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 , pipa objek ke , 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 cmdlet Add-Type.

Anda juga dapat menggunakan cmdlet Export-Clixml untuk menyimpan instans objek, termasuk anggota tambahan, dalam file. Kemudian Anda dapat menggunakan cmdlet Import-Clixml 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, lebih jarang diperlukan. 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 file .

Perintah pertama menggunakan cmdlet untuk mendapatkan objek FileInfo yang mewakili file . Ini menyimpannya dalam variabel $a.

Perintah kedua menambahkan properti catatan ke objek di $a.

Perintah ketiga menggunakan notasi titik untuk mendapatkan nilai properti Status objek di . Seperti yang ditunjukkan oleh output, nilainya 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 file . Properti baru adalah alias untuk properti Panjang .

Perintah pertama menggunakan cmdlet untuk mendapatkan 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 StringUse note 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, StringGunakan, dan nilainya adalah nilai properti catatan, Tampilkan.

$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 jenis untuk membulatkan ukuran file ke tempat desimal kedua.

Parameter Nilai juga menggunakan 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 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 .

Cmdlet New-Object membuat PSObject yang disimpan dalam variabel $Asset. Akselerator jenis [ordered] membuat kamus yang diurutkan yang disimpan dalam variabel $d. Piping $Asset ke Add-Member menambahkan pasangan kunci-nilai dalam kamus ke objek sebagai NoteProperty anggota. parameter TypeName menetapkan jenis Asset ke PSObject. cmdlet Get-Member 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 dengan Get-Member.

Contoh 6: Menambahkan AliasProperty ke objek

Dalam contoh ini kita membuat objek kustom yang berisi dua NoteProperty anggota. Jenis untuk NoteProperty mencerminkan jenis nilai yang disimpan dalam properti . Dalam hal ini, properti Usia adalah string.

$user = [pscustomobject]@{
    Name = 'Doris'
    Age = '20'
}
$addMemberSplat = @{
    MemberType = 'AliasProperty'
    Name = 'IntAge'
    Value = 'Age'
    SecondValue = 'UInt32'
}
$user | Add-Member @addMemberSplat
$user | 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 dan Set. Saat kami 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 Force, Add-Member mengganti anggota yang ada dengan anggota baru. Anda tidak dapat menggunakan parameter Force untuk menggantikan anggota standar dari jenis.

Properti parameter

Jenis:SwitchParameter
Nilai default:None
Mendukung wildcard:False
DontShow:False

Set parameter

MemberSet
Position:Named
Wajib:False
Nilai dari alur:False
Nilai dari alur berdasarkan nama properti:False
Nilai dari argumen yang tersisa:False
NotePropertySingleMemberSet
Position:Named
Wajib:False
Nilai dari alur:False
Nilai dari alur berdasarkan nama properti:False
Nilai dari argumen yang tersisa:False
NotePropertyMultiMemberSet
Position:Named
Wajib:False
Nilai dari alur:False
Nilai dari alur berdasarkan nama properti:False
Nilai dari argumen yang tersisa:False

-InputObject

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

Properti parameter

Jenis:PSObject
Nilai default:None
Mendukung wildcard:False
DontShow:False

Set parameter

(All)
Position:Named
Wajib:True
Nilai dari alur:True
Nilai dari alur berdasarkan nama properti:False
Nilai dari argumen yang tersisa:False

-MemberType

Menentukan tipe anggota yang akan ditambahkan. Parameter ini diperlukan. Nilai yang dapat diterima untuk parameter ini adalah:

  • AliasProperty
  • CodeMethod
  • CodeProperty
  • PropertiCatatan
  • 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.

Properti parameter

Jenis:PSMemberTypes
Nilai default:None
Nilai yang diterima:AliasProperty, CodeMethod, CodeProperty, NoteProperty, ScriptMethod, ScriptProperty
Mendukung wildcard:False
DontShow:False
Alias:Tipe

Set parameter

MemberSet
Position:0
Wajib:True
Nilai dari alur:False
Nilai dari alur berdasarkan nama properti:False
Nilai dari argumen yang tersisa:False

-Name

Menentukan nama anggota yang ditambahkan cmdlet ini.

Properti parameter

Jenis:String
Nilai default:None
Mendukung wildcard:False
DontShow:False

Set parameter

MemberSet
Position:1
Wajib:True
Nilai dari alur:False
Nilai dari alur berdasarkan nama properti:False
Nilai dari argumen yang tersisa: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.

Properti parameter

Jenis:IDictionary
Nilai default:None
Mendukung wildcard:False
DontShow:False

Set parameter

NotePropertyMultiMemberSet
Position:0
Wajib:True
Nilai dari alur:False
Nilai dari alur berdasarkan nama properti:False
Nilai dari argumen yang tersisa:False

-NotePropertyName

Menentukan nama properti catatan.

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

Parameter ini diperkenalkan di Windows PowerShell 3.0.

Properti parameter

Jenis:String
Nilai default:None
Mendukung wildcard:False
DontShow:False

Set parameter

NotePropertySingleMemberSet
Position:0
Wajib:True
Nilai dari alur:False
Nilai dari alur berdasarkan nama properti:False
Nilai dari argumen yang tersisa:False

-NotePropertyValue

Menentukan nilai properti catatan.

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

Parameter ini diperkenalkan di Windows PowerShell 3.0.

Properti parameter

Jenis:Object
Nilai default:None
Mendukung wildcard:False
DontShow:False

Set parameter

NotePropertySingleMemberSet
Position:1
Wajib:True
Nilai dari alur:False
Nilai dari alur berdasarkan nama properti:False
Nilai dari argumen yang tersisa:False

-PassThru

Mengembalikan objek yang mewakili item dengan mana 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 PSObject pembungkus objek, bukan ke objek. Gunakan parameter PassThru untuk membuat objek output untuk objek apa pun yang memiliki pembungkus PSObject .

Properti parameter

Jenis:SwitchParameter
Nilai default:None
Mendukung wildcard:False
DontShow:False

Set parameter

(All)
Position:Named
Wajib:False
Nilai dari alur:False
Nilai dari alur berdasarkan nama properti:False
Nilai dari argumen yang tersisa:False

-SecondValue

Menentukan informasi tambahan opsional tentang AliasProperty, ScriptProperty, atau anggota CodeProperty.

Jika digunakan saat menambahkanaliasProperty , 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 AliasPropertyyang sesuai.

Untuk CodeProperty, nilai harus menjadi referensi ke metode yang mengimplementasikan Set pengakses. Gunakan metode GetMethod() referensi jenis untuk mendapatkan referensi ke metode . Metode harus mengambil satu parameter yang merupakan PSObject. Aksesor Get ditetapkan menggunakan parameter Nilai.

Untuk ScriptProperty , nilainya harus berupa blok skrip yang mengimplementasikan aksesor Set. Aksesor Get ditetapkan menggunakan parameter Nilai.

Properti parameter

Jenis:Object
Nilai default:None
Mendukung wildcard:False
DontShow:False

Set parameter

MemberSet
Position:3
Wajib:False
Nilai dari alur:False
Nilai dari alur berdasarkan nama properti:False
Nilai dari argumen yang tersisa:False

-TypeName

Menentukan nama untuk jenis tersebut.

Ketika jenis adalah kelas di namespace 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.

Properti parameter

Jenis:String
Nilai default:None
Mendukung wildcard:False
DontShow:False

Set parameter

TypeNameSet
Position:Named
Wajib:True
Nilai dari alur:False
Nilai dari alur berdasarkan nama properti:False
Nilai dari argumen yang tersisa:False
NotePropertyMultiMemberSet
Position:Named
Wajib:False
Nilai dari alur:False
Nilai dari alur berdasarkan nama properti:False
Nilai dari argumen yang tersisa:False
NotePropertySingleMemberSet
Position:Named
Wajib:False
Nilai dari alur:False
Nilai dari alur berdasarkan nama properti:False
Nilai dari argumen yang tersisa:False
MemberSet
Position:Named
Wajib:False
Nilai dari alur:False
Nilai dari alur berdasarkan nama properti:False
Nilai dari argumen yang tersisa:False

-Value

Menentukan nilai awal anggota yang ditambahkan. Jika Anda menambahkan AliasProperty, CodeProperty, atau anggota ScriptProperty, Anda dapat memberikan informasi tambahan menggunakan parameter SecondValue.

  • Untuk aliasProperty, nilainya harus berupa nama properti yang sedang di-alias.
  • Untuk CodeMethod, nilainya harus menjadi referensi ke metode . Gunakan metode GetMethod() referensi jenis untuk mendapatkan referensi ke metode .
  • Untuk CodeProperty, nilai harus menjadi referensi ke metode yang mengimplementasikan aksesor Get. Gunakan metode GetMethod() 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.

Properti parameter

Jenis:Object
Nilai default:None
Mendukung wildcard:False
DontShow:False

Set parameter

MemberSet
Position:2
Wajib:False
Nilai dari alur:False
Nilai dari alur berdasarkan nama properti:False
Nilai dari argumen yang tersisa:False

CommonParameters

Cmdlet ini mendukung parameter umum: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction, dan -WarningVariable. Untuk informasi selengkapnya, lihat about_CommonParameters.

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 operator . Misalnya, untuk menguji objek yang disimpan dalam variabel $obj, ketik $obj -is [psobject].

objek jenis PSObject mempertahankan daftar anggota mereka dalam urutan anggota ditambahkan ke objek.

NamaMemberType , nama , nilai, dan parameter SecondValue bersifat opsional. Jika Anda menghilangkan nama parameter, nilai parameter yang tidak disebutkan namanya harus muncul dalam urutan ini: MemberType, Nama, nilai , dan SecondValue.

Jika Anda menyertakan nama parameter, parameter dapat muncul dalam urutan apa pun.

Anda dapat menggunakan variabel otomatis $this 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.