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-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
System      Name     PSVersion
------      ----     ---------
Server Core Server30 4.0

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.

Lihat juga