about_Object_Creation
Deskripsi singkat
Menjelaskan cara membuat objek di PowerShell.
Deskripsi panjang
Anda dapat membuat objek di PowerShell dan menggunakan objek yang Anda buat dalam perintah dan skrip.
Ada banyak cara untuk membuat objek, daftar ini tidak definitif:
- New-Object: Membuat instans objek .NET Framework atau objek COM.
- Import-Csv / ConvertFrom-CSV: Membuat objek kustom (PSCustomObject) dari item yang didefinisikan sebagai nilai yang dipisahkan karakter.
- ConvertFrom-Json: Membuat objek kustom yang ditentukan dalam JavaScript Object Notation (JSON).
- ConvertFrom-String: Dibangun di atas FlashExtract,
ConvertFrom-String
membuat objek kustom dari data string terstruktur. Topik ini akan menunjukkan dan mendiskusikan masing-masing metode ini. - ConvertFrom-StringData: Membuat objek kustom yang didefinisikan sebagai pasangan nilai kunci.
- Add-Type: Memungkinkan Anda menentukan kelas dalam sesi PowerShell yang dapat Anda instans dengan
New-Object
. - Modul Baru: Parameter AsCustomObject membuat objek kustom yang Anda tentukan menggunakan blok skrip.
- Add-Member: Menambahkan properti ke objek yang sudah ada. Anda dapat menggunakan
Add-Member
untuk membuat objek kustom dari jenis sederhana, seperti[System.Int32]
. - Pilih Objek: Memilih properti pada objek. Anda dapat menggunakan
Select-Object
untuk membuat properti kustom dan terhitung pada objek yang sudah dibuat instans.
Metode tambahan berikut dibahas dalam artikel ini:
- Dengan memanggil konstruktor jenis menggunakan metode statis
new()
- Dengan mengetik tabel hash nama properti dan nilai properti
Metode statis baru()
Semua jenis .NET memiliki new()
metode yang memungkinkan Anda membuat instans dengan lebih mudah. Anda juga dapat melihat semua konstruktor yang tersedia untuk jenis tertentu.
Untuk melihat konstruktor untuk jenis, tentukan new
nama metode setelah nama jenis dan tekan <ENTER>
.
[System.Uri]::new
OverloadDefinitions
-------------------
uri new(string uriString)
uri new(string uriString, bool dontEscape)
uri new(uri baseUri, string relativeUri, bool dontEscape)
uri new(string uriString, System.UriKind uriKind)
uri new(uri baseUri, string relativeUri)
uri new(uri baseUri, uri relativeUri)
Sekarang, Anda dapat membuat System.Uri dengan menentukan konstruktor yang sesuai.
[System.Uri]::new("https://www.bing.com")
AbsolutePath : /
AbsoluteUri : https://www.bing.com/
LocalPath : /
Authority : www.bing.com
...
Anda dapat menggunakan sampel berikut untuk menentukan jenis .NET apa yang saat ini dimuat untuk Anda buat instans.
[AppDomain]::CurrentDomain.GetAssemblies() |
ForEach-Object {
$_.GetExportedTypes() |
ForEach-Object { $_.FullName }
}
Objek yang dibuat menggunakan new()
metode mungkin tidak memiliki properti yang sama dengan objek dengan jenis yang sama yang dibuat oleh cmdlet PowerShell. Cmdlet PowerShell, penyedia, dan Extended Type System dapat menambahkan properti tambahan ke instans.
Misalnya, penyedia FileSystem di PowerShell menambahkan enam nilai NoteProperty ke objek DirectoryInfo yang dikembalikan oleh Get-Item
.
$PSDirInfo = Get-Item /
$PSDirInfo | Get-Member | Group-Object MemberType | Select-Object Count, Name
Count Name
----- ----
4 CodeProperty
13 Property
6 NoteProperty
1 ScriptProperty
18 Method
Saat Anda membuat objek DirectoryInfo secara langsung, objek tersebut tidak memiliki enam nilai NoteProperty tersebut.
$NewDirInfo = [System.IO.DirectoryInfo]::new('/')
$NewDirInfo | Get-Member | Group-Object MemberType | Select-Object Count, Name
Count Name
----- ----
4 CodeProperty
13 Property
1 ScriptProperty
18 Method
Untuk informasi selengkapnya tentang Extended Type System, lihat about_Types.ps1xml.
Fitur ini ditambahkan di PowerShell 5.0
Membuat objek dari tabel hash
Anda dapat membuat objek dari tabel hash properti dan nilai properti.
Sintaksisnya adalah sebagai berikut:
[<class-name>]@{
<property-name>=<property-value>
<property-name>=<property-value>
}
Metode ini hanya berfungsi untuk kelas yang memiliki konstruktor tanpa parameter. Properti objek harus publik dan dapat diatur.
Fitur ini ditambahkan di PowerShell versi 3.0
Membuat objek kustom dari tabel hash
Objek kustom sangat berguna dan mudah dibuat menggunakan metode tabel hash. Kelas PSCustomObject dirancang khusus untuk tujuan ini.
Objek kustom adalah cara yang sangat baik untuk mengembalikan output yang disesuaikan dari fungsi atau skrip. Ini lebih berguna daripada mengembalikan output berformat yang tidak dapat diformat ulang atau disalurkan ke perintah lain.
Perintah dalam Test-Object function
atur beberapa nilai variabel lalu gunakan nilai tersebut untuk membuat objek kustom. Anda dapat melihat objek ini digunakan di bagian Update-Help
contoh topik bantuan cmdlet.
function Test-Object {
$ModuleName = "PSScheduledJob"
$HelpCulture = "en-us"
$HelpVersion = "3.1.0.0"
[PSCustomObject]@{
"ModuleName"=$ModuleName
"UICulture"=$HelpCulture
"Version"=$HelpVersion
}
$ModuleName = "PSWorkflow"
$HelpCulture = "en-us"
$HelpVersion = "3.0.0.0"
[PSCustomObject]@{
"ModuleName"=$ModuleName
"UICulture"=$HelpCulture
"Version"=$HelpVersion
}
}
Test-Object
Output fungsi ini adalah kumpulan objek kustom yang diformat sebagai tabel secara default.
ModuleName UICulture Version
--------- --------- -------
PSScheduledJob en-us 3.1.0.0
PSWorkflow en-us 3.0.0.0
Pengguna dapat mengelola properti objek kustom seperti yang mereka lakukan dengan objek standar.
(Test-Object).ModuleName
PSScheduledJob
PSWorkflow
Objek jenis PSObject mempertahankan daftar anggota dalam urutan anggota ditambahkan ke objek. Meskipun objek Hashtable tidak menjamin urutan pasangan kunci-nilai, mentransmisikan hashtable harfiah untuk [pscustomobject]
mempertahankan urutan.
Hashtable harus harfiah. Jika Anda membungkus hashtable dalam tanda kurung atau jika Anda mentransmisikan variabel yang berisi hashtable, tidak ada jaminan bahwa pesanan dipertahankan.
$hash = @{
Name = "Server30"
System = "Server Core"
PSVersion = "4.0"
}
$Asset = [pscustomobject]$hash
$Asset
PSVersion Name System
--------- ---- ------
4.0 Server30 Server Core
Membuat objek non-kustom dari tabel hash
Anda juga dapat menggunakan tabel hash untuk membuat objek untuk kelas non-kustom. Saat Anda membuat objek untuk kelas non-kustom, nama jenis yang memenuhi syarat namespace diperlukan, meskipun Anda dapat menghilangkan komponen namespace Sistem awal apa pun.
Misalnya, perintah berikut membuat objek opsi sesi.
[System.Management.Automation.Remoting.PSSessionOption]@{
IdleTimeout=43200000
SkipCnCheck=$True
}
Persyaratan fitur tabel hash, terutama persyaratan konstruktor tanpa parameter, menghilangkan banyak kelas yang ada. Namun, sebagian besar kelas opsi PowerShell dirancang untuk bekerja dengan fitur ini, serta kelas lain yang sangat berguna, seperti kelas ProcessStartInfo.
[System.Diagnostics.ProcessStartInfo]@{
CreateNoWindow="$true"
Verb="run as"
}
Arguments :
ArgumentList : {}
CreateNoWindow : True
EnvironmentVariables : {OneDriveConsumer, PROCESSOR_ARCHITECTURE,
CommonProgramFiles(x86), APPDATA...}
Environment : {[OneDriveConsumer, C:\Users\user1\OneDrive],
[PROCESSOR_ARCHITECTURE, AMD64],
[CommonProgramFiles(x86),
C:\Program Files (x86)\Common Files],
[APPDATA, C:\Users\user1\AppData\Roaming]...}
RedirectStandardInput : False
RedirectStandardOutput : False
RedirectStandardError : False
...
Anda juga dapat menggunakan fitur tabel hash saat mengatur nilai parameter. Misalnya, nilai parameter SessionOption dari New-PSSession
.
cmdlet bisa menjadi tabel hash.
New-PSSession -ComputerName Server01 -SessionOption @{
IdleTimeout=43200000
SkipCnCheck=$True
}
Register-ScheduledJob Name Test -FilePath .\Get-Inventory.ps1 -Trigger @{
Frequency="Daily"
At="15:00"
}
Objek generik
Anda juga dapat membuat objek generik di PowerShell. Generik adalah kelas, struktur, antarmuka, dan metode yang memiliki tempat penampung (parameter jenis) untuk satu atau beberapa jenis yang disimpan atau digunakan.
Contoh berikut membuat objek Kamus.
$dict = New-Object 'System.Collections.Generic.Dictionary[String,Int]'
$dict.Add("One", 1)
$dict
Key Value
--- -----
One 1
Untuk informasi selengkapnya tentang Generik, lihat Generik di .NET.