Bagikan melalui


12. Atribut

Catatan editorial

Penting

Windows PowerShell Language Specification 3.0 diterbitkan pada Desember 2012 dan didasarkan pada Windows PowerShell 3.0. Spesifikasi ini tidak mencerminkan status PowerShell saat ini. Tidak ada rencana untuk memperbarui dokumentasi ini untuk mencerminkan status saat ini. Dokumentasi ini disajikan di sini untuk referensi historis.

Dokumen spesifikasi tersedia sebagai dokumen Microsoft Word dari Pusat Unduhan Microsoft di: https://www.microsoft.com/download/details.aspx?id=36389 Dokumen Word telah dikonversi untuk presentasi di sini di Microsoft Learn. Selama konversi, beberapa perubahan editorial telah dilakukan untuk mengakomodasi pemformatan untuk platform Dokumen. Beberapa kesalahan ketik dan kesalahan kecil telah dikoreksi.

Atribut objek mengaitkan informasi sistem yang telah ditentukan sebelumnya dengan elemen target , yang dapat berupa blok param atau parameter (§8,10). Setiap objek atribut memiliki jenis atribut .

Informasi yang disediakan oleh atribut juga dikenal sebagai metadata . Metadata dapat diperiksa oleh perintah atau lingkungan eksekusi untuk mengontrol bagaimana perintah memproses data atau sebelum run time oleh alat eksternal untuk mengontrol bagaimana perintah itu sendiri diproses atau dipertahankan.

Beberapa atribut dapat diterapkan ke elemen target yang sama.

12.1 Spesifikasi atribut

Saran

Notasi ~opt~ dalam definisi sintaks menunjukkan bahwa entitas leksikal bersifat opsional dalam sintaks.

attribute-list:
    attribute
    attribute-list new-lines~opt~ attribute

attribute:
    [ new-lines~opt~ attribute-name ( attribute-arguments new-lines~opt~ ) new-lines~opt~ ]
    type-literal

attribute-name:
    type-spec

attribute-arguments:
    attribute-argument
    attribute-argument new-lines~opt~ ,
    attribute-arguments

attribute-argument:
    new-lines~opt~ expression
    new-lines~opt~ simple-name
    new-lines~opt~ simple-name = new-lines~opt~ expression

Atribut terdiri dari nama atribut dan daftar argumen posisi dan argumen bernama yang opsional. Argumen posisi (jika ada) mendahului argumen yang diberi nama. Argumen bernama terdiri dari nama sederhana, yang secara opsional diikuti oleh tanda sama dengan dan diikuti oleh sebuah ekspresi. Jika ekspresi dihilangkan, nilai $true diasumsikan.

nama atribut adalah jenis atribut yang tersimpan (§12.3) atau beberapa jenis atribut yang ditentukan oleh implementasi.

12.2 Instans atribut

Instans atribut adalah objek dari jenis atribut. Instance mewakili atribut saat waktu eksekusi.

Untuk membuat objek dari beberapa jenis atribut A, gunakan notasi A(). Atribut dideklarasikan dengan mengapit instansnya di dalam [], seperti dalam [A()]. Beberapa jenis atribut memiliki parameter posisi dan nama (§8,14), sama seperti fungsi dan cmdlet. Misalnya

[A(10,IgnoreCase=$true)]

menunjukkan sebuah instans dari jenis yang dibuat menggunakan parameter posisi dengan nilai argumen 10, dan parameter bernama, IgnoreCase, dengan nilai argumen $true.

12.3 Atribut yang dicadangkan

Atribut yang dijelaskan di bagian berikut dapat digunakan untuk menambah atau memodifikasi perilaku fungsi, filter, skrip, dan cmdlet PowerShell.

12.3.1 Atribut Alias

Atribut ini digunakan dalam parameter skrip untuk menentukan nama alternatif untuk parameter. Parameter mungkin memiliki beberapa alias, dan setiap nama alias harus unik dalam daftar parameter . Salah satu kemungkinan penggunaannya adalah memiliki nama yang berbeda untuk parameter dalam set parameter yang berbeda (lihat ParameterSetName).

Argumen atribut memiliki jenis string[].

Pertimbangkan panggilan fungsi Test1 yang memiliki blok parameter berikut, dan dipanggil seperti yang ditunjukkan:

param (
    [Parameter(Mandatory = $true)]
    [Alias("CN")]
    [Alias("Name", "System")]
    [string[]] $ComputerName
)

Test1 "Mars", "Saturn"                # pass argument by position
Test1 -ComputerName "Mars", "Saturn"  # pass argument by name
Test1 -CN "Mars", "Saturn"            # pass argument using first alias
Test1 -Name "Mars", "Saturn"          # pass argument using second alias
Test1 -Sys "Mars", "Saturn"           # pass argument using third alias

Pertimbangkan panggilan fungsi Test2 yang memiliki blok parameter berikut, dan dipanggil seperti yang ditunjukkan:

param (
    [Parameter(Mandatory = $true, ValueFromPipelineByPropertyName = $true)]
    [Alias('PSPath')]
    [string] $LiteralPath
)

Get-ChildItem "E:\*.txt" | Test2 -LiteralPath { $_ ; "`n`t";
    $_.FullName + ".bak" }
Get-ChildItem "E:\*.txt" | Test2

Cmdlet Get-ChildItem (alias dir) menambahkan ke objek yang dikembalikan sebuah NoteProperty baru dari jenis string, yang disebut PSPath.

12.3.2 Atribut AllowEmptyCollection

Atribut ini digunakan dalam parameter skrip untuk memungkinkan koleksi kosong sebagai argumen dari parameter yang wajib.

Pertimbangkan panggilan fungsi Test yang memiliki blok parameter berikut, dan dipanggil seperti yang ditunjukkan:

param (
    [Parameter(Mandatory = $true)]
    [AllowEmptyCollection()]
    [string[]] $ComputerName
)

Test "Red", "Green" # $ComputerName has Length 2
Test "Red" # $ComputerName has Length 1
Test -Comp @() # $ComputerName has Length 0

12.3.3 Atribut AllowEmptyString

Atribut ini digunakan dalam parameter skrip untuk memungkinkan string kosong sebagai argumen parameter wajib.

Pertimbangkan panggilan fungsi Test yang memiliki blok parameter berikut, dan dipanggil seperti yang ditunjukkan:

param (
    [Parameter(Mandatory = $true)]
    [AllowEmptyString()]
    [string] $ComputerName
)

Test "Red" # $ComputerName is "Red"
Test "" # empty string is permitted
Test -Comp "" # empty string is permitted

12.3.4 Atribut AllowNull

Atribut ini digunakan dalam parameter skrip untuk memungkinkan $null sebagai argumen parameter wajib yang tidak tersedia konversi implisit.

Pertimbangkan uji panggilan fungsi yang memiliki blok param berikut, dan yang dipanggil seperti yang ditunjukkan:

param (
    [Parameter(Mandatory = $true)]
    [AllowNull()]
    [int[]] $Values
)

Test 10, 20, 30     # $values has Length 3, values 10, 20, 30
Test 10, $null, 30  # $values has Length 3, values 10, 0, 30
Test -Val $null     # $values has value $null

Perhatikan bahwa kasus kedua di atas tidak memerlukan atribut ini; sudah ada konversi implisit dari $null ke int.

12.3.5 Atribut CmdletBinding

Atribut ini digunakan dalam daftar atribut dari blok parameter dari sebuah fungsi untuk menunjukkan bahwa fungsi tersebut bertindak mirip dengan cmdlet. Khususnya, ini memungkinkan fungsi untuk mengakses sejumlah metode dan properti melalui variabel $PSCmdlet dengan menggunakan blok bernama begin, process, dan end (§8.10.7).

Ketika atribut ini ada, argumen posisi yang tidak memiliki parameter posisi yang cocok menyebabkan pengikatan parameter gagal dan $args tidak ditentukan. (Tanpa atribut ini $args akan mengambil nilai argumen posisional yang tidak cocok.)

Argumen berikut digunakan untuk menentukan karakteristik parameter:

Nama Parameter Tujuan
SupportsShouldProcess (dengan nama)

Jenis: bool; Nilai bawaan: $false

Menentukan apakah fungsi mendukung panggilan ke metode ShouldProcess, yang digunakan untuk meminta umpan balik kepada pengguna sebelum fungsi membuat perubahan pada sistem. Nilai $true menunjukkan bahwa memang benar. Nilai $false menunjukkan tidak adanya hal tersebut.

ConfirmImpact (bernama)

Jenis: string; Nilai default: "Sedang"

Menentukan tingkat dampak tindakan yang dilakukan. Panggilan ke metode ShouldProcess menampilkan perintah konfirmasi hanya ketika argumen ConfirmImpact lebih besar dari atau sama dengan nilai variabel preferensi $ConfirmPreference.

Nilai yang mungkin dari argumen ini adalah:

Tidak Ada: Sembunyikan semua permintaan untuk konfirmasi.

Rendah: Tindakan yang dilakukan memiliki risiko rendah kehilangan data.

Sedang: Tindakan yang dilakukan memiliki risiko kehilangan data yang sedang.

Tinggi: Tindakan yang dilakukan memiliki risiko tinggi kehilangan data.

Nilai $ConfirmPreference dapat diatur sehingga hanya cmdlet dengan tingkat dampak yang sama atau lebih tinggi yang dapat meminta konfirmasi sebelum melakukan operasi mereka. Misalnya, jika $ConfirmPreference diatur ke Sedang, cmdlet dengan tingkat dampak Sedang atau Tinggi dapat meminta konfirmasi. Permintaan dari cmdlet dengan tingkat dampak rendah dibatasi.

DefaultParameterSetName (bernama)

Jenis: string; Nilai default: "__AllParameterSets"

Menentukan set parameter untuk digunakan jika hal tersebut tidak dapat ditentukan dari argumen. Lihat argumen bernama ParameterSetName di parameter Parameter ([§12.3.7][§12.3.7]).

PositionalBinding (dengan nama)

Jenis: bool; Nilai bawaan: $true

Menentukan apakah pengikatan posisi didukung atau tidak. Nilai argumen ini diabaikan jika ada parameter yang menentukan nilai non-default untuk Posisi argumen bernama atau argumen bernama ParameterSetName dalam Parameter atribut ([§12.3.7][§12.3.7]). Jika argumen adalah $false, maka tidak ada parameter yang memiliki posisi. Sebaliknya, parameter diberi posisi berdasarkan urutan parameter ditentukan.

Berikut adalah contoh kerangka kerja untuk menggunakan atribut ini:

[CmdletBinding(SupportsShouldProcess = $true, ConfirmImpact = "Low")]
param ( ... )

begin { ... }
Get-process { ... }
end { ... }

12.3.6 Atribut OutputType

Atribut ini digunakan dalam daftar atribut dari blok parameter untuk menentukan jenis yang dikembalikan. Argumen berikut digunakan untuk menentukan karakteristik parameter:

Nama Parameter Tujuan
Jenis (posisi 0)

Jenis: string[] atau array dari tipe literal

Daftar jenis nilai yang dikembalikan.

ParameterSetName (dengan nama)

Jenis: string[]

Menentukan set parameter yang mengembalikan jenis yang ditunjukkan oleh elemen-elemen parameter Type yang sesuai.

Berikut adalah beberapa contoh penggunaan atribut ini:

[OutputType([int])] param ( ... )
[OutputType("double")] param ( ... )
[OutputType("string","string")] param ( ... )

12.3.7 Atribut Parameter

Atribut ini digunakan dalam parameter skrip . Argumen bernama berikut digunakan untuk menentukan karakteristik parameter:

Parameter Tujuan
HelpMessage (dengan nama)

Jenis: teks

Argumen ini menentukan pesan yang dimaksudkan untuk berisi deskripsi singkat parameter. Pesan ini digunakan dengan cara yang ditentukan implementasi ketika fungsi atau cmdlet dijalankan namun parameter wajib yang memiliki HelpMessage tidak memiliki argumen yang sesuai.

Contoh berikut menunjukkan deklarasi parameter yang memberikan deskripsi parameter.

param ( [Parameter(Wajib = $true,
HelpMessage = "Sebuah array dari nama-nama komputer.")]
[string[]] $ComputerName )

Windows PowerShell: Jika parameter yang diperlukan tidak disediakan, runtime meminta nilai parameter kepada pengguna. Kotak dialog perintah menyertakan teks HelpMessage.

Wajib (dengan nama)

Jenis: bool; Nilai bawaan: $false

Argumen ini menentukan apakah parameter diperlukan dalam kumpulan parameter yang diberikan (lihat argumen ParameterSetName di bawah). Nilai $true menunjukkan bahwa kondisi tersebut benar. Nilai $false menunjukkan bahwa itu tidak demikian.

param ( [Parameter(Wajib = $true)]
[string[]] $ComputerName )

Windows PowerShell: Jika parameter yang diperlukan tidak disediakan, runtime meminta nilai parameter kepada pengguna. Kotak dialog perintah menyertakan teks HelpMessage, jika ada.

ParameterSetName (dengan nama)

Jenis: string; Nilai default: "__AllParameterSets"

Dimungkinkan untuk menulis satu fungsi atau cmdlet yang dapat melakukan tindakan yang berbeda untuk skenario yang berbeda. Ini dilakukan dengan mengekspos grup parameter yang berbeda tergantung pada tindakan yang ingin diambil. Pengelompokan parameter tersebut disebut set parameter .

ParameterSetName argumen menentukan set parameter ke mana parameter termasuk. Perilaku ini berarti bahwa setiap set parameter harus memiliki satu parameter unik yang bukan anggota dari kumpulan parameter lainnya.

Untuk parameter yang termasuk dalam beberapa set parameter, tambahkan atribut Parameter untuk setiap set parameter. Ini memungkinkan parameter didefinisikan secara berbeda untuk setiap set parameter.

Set parameter yang berisi beberapa parameter posisi harus menentukan posisi unik untuk setiap parameter. Tidak ada dua parameter posisi yang dapat menentukan posisi yang sama.

Jika tidak ada set parameter yang ditetapkan untuk suatu parameter, parameter tersebut adalah bagian dari semua set parameter.

Ketika beberapa set parameter ditentukan, argumen bernama DefaultParameterSetName dari atribut CmdletBinding ([§12.3.5][§12.3.5]) digunakan untuk menentukan set parameter default. Runtime menggunakan set parameter default jika tidak dapat menentukan set parameter yang digunakan berdasarkan informasi yang disediakan oleh perintah, atau menghasilkan pengecualian jika tidak ada set parameter default yang ditentukan.

Contoh berikut menunjukkan Pengujian fungsi dengan deklarasi parameter dua parameter yang termasuk dalam dua set parameter yang berbeda, dan parameter ketiga milik kedua set:

param ( [Parameter(Wajib = $true,
ParameterSetName = "Computer")]
[string[]] $ComputerName,

[Parameter(Wajib = $true,
ParameterSetName = "User")]
[string[]] $UserName,

[Parameter(Wajib = $true,
ParameterSetName = "Computer")]
[Parameter(ParameterSetName = "User")]
[int] $SharedParam = 5 )

if ($PSCmdlet.ParameterSetName -eq "Computer")
{
# menangani pada set parameter "Komputer"
}

elseif ($PSCmdlet.ParameterSetName -eq "User")
{
# menangani pengaturan parameter "Pengguna"
}

}

Tes -ComputerName "Mars","Venus" -SharedParam 10
Tes -UserName "Mary","Jack"
Uji -UserName "Mary","Jack" -SharedParam 20

Posisi (bernama)

Jenis: int

Argumen ini menentukan posisi parameter dalam daftar argumen. Jika argumen ini tidak ditentukan, nama parameter atau aliasnya harus ditentukan secara eksplisit saat parameter diatur. Jika tidak ada parameter fungsi yang memiliki posisi, posisi ditetapkan ke setiap parameter berdasarkan urutan penerimaannya.

Contoh berikut menunjukkan deklarasi parameter yang nilainya harus ditentukan sebagai argumen pertama saat fungsi dipanggil.

param ( [Parameter(Posisi = 0)]
[string[]] $ComputerName )

ValueFromPipeline (bernama)

Jenis: bool; Nilai bawaan: $false

Argumen ini menentukan apakah parameter menerima input dari objek alur. Nilai $true menunjukkan bahwa memang benar. Nilai $false menunjukkan bahwa itu tidak demikian.

Tentukan $true jika fungsi atau cmdlet mengakses objek lengkap, bukan hanya properti objek.

Hanya satu parameter dalam set parameter yang dapat mendeklarasikan ValueFromPipeline sebagai $true.

Contoh berikut menunjukkan deklarasi parameter wajib, $ComputerName, yang menerima objek input yang diteruskan ke fungsi melalui pipeline.

param ( [Parameter(Wajib = $true,
NilaiDariAliran=$true)
[string[]] $ComputerName )

Untuk contoh penggunaan parameter ini bersama dengan atribut Alias, lihat [§12.3.1][§12.3.1].

ValueFromPipelineByPropertyName (dinamai)

Jenis: bool; Nilai bawaan: $false

Argumen ini menentukan apakah parameter mengambil nilainya dari properti objek alur yang memiliki nama yang sama atau alias yang sama dengan parameter ini. Nilai $true menunjukkan bahwa memang benar. Nilai $false menunjukkan bahwa itu tidak demikian.

Tentukan $true jika kondisi berikut ini benar: parameter mengakses properti objek yang disalurkan, dan properti memiliki nama yang sama dengan parameter , atau properti memiliki alias yang sama dengan parameter .

Parameter yang memiliki ValueFromPipelineByPropertyName disetel ke $true tidak perlu memiliki parameter lain dalam set yang sama dengan ValueFromPipeline disetel ke $true.

Jika fungsi memiliki parameter $ComputerName, dan objek piped memiliki properti ComputerName, nilai properti ComputerName ditetapkan ke parameter $ComputerName Fungsi:

param ( [Parameter(Wajib = $true,
ValueFromPipelineByPropertyName = $true)]
[string[]] $ComputerName )

Beberapa parameter dalam set parameter dapat menentukan ValueFromPipelineByPropertyName sebagai $true. Meskipun, satu objek input tidak dapat terikat ke beberapa parameter, properti yang berbeda dalam objek input tersebut mungkin terikat ke parameter yang berbeda.

Saat mengikat parameter dengan properti objek input, lingkungan runtime terlebih dahulu mencari properti dengan nama yang sama dengan parameter .  Jika properti seperti itu tidak ada, lingkungan runtime mencari alias untuk parameter tersebut, dalam urutan deklarasinya, memilih alias pertama seperti itu yang propertinya ada.

fungsi Process-Date
{
param(
[Parameter(ValueFromPipelineByPropertyName=$true)]
[int]$Tahun,

[Parameter(ValueFromPipelineByPropertyName=$true)]
[int]$Month,

[Parameter(ValueFromPipelineByPropertyName=$true)]
[int]$Day
)

proses { ... }
}

Get-Date | Process-Date

NilaiDariArgumenTersisa (berikut nama)

Jenis: bool; Nilai bawaan: $false

Argumen ini menentukan apakah parameter menerima semua argumen yang tersisa yang tidak terikat ke parameter fungsi. Nilai $true menunjukkan bahwa memang benar. Nilai $false menunjukkan bahwa itu tidak demikian.

Contoh berikut menunjukkan parameter $Others yang menerima semua argumen objek input yang tersisa yang diteruskan ke Pengujian fungsi:

param ( [Parameter(Wajib = $true)][int] $p1,
[Parameter(Wajib = $true)][int] $p2,
[Parameter(ValueFromRemainingArguments = $true)]
[string[]] $Lainnya )

Tes 10 20 # $Others memiliki panjang 0
Uji 10 20 30 40 # $Others memiliki Panjang 2, nilai 30,40

Implementasi juga dapat mendefinisikan atribut lain.

Atribut berikut juga disediakan:

  • HelpMessageBaseName: Menentukan lokasi tempat pengidentifikasi sumber daya berada. Misalnya, parameter ini dapat menentukan rakitan sumber daya yang berisi pesan Bantuan yang akan dilokalkan.
  • HelpMessageResourceId: Menentukan pengidentifikasi sumber daya untuk pesan Bantuan.

12.3.8 Atribut PSDefaultValue

Atribut ini digunakan dalam parameter skrip untuk memberikan informasi tambahan tentang parameter. Atribut digunakan dengan cara yang ditentukan implementasi. Argumen berikut digunakan untuk menentukan karakteristik parameter:

Nama Parameter Tujuan
Bantuan [Nama]

Jenis: teks

Argumen ini menentukan pesan yang dimaksudkan untuk berisi deskripsi singkat tentang nilai default parameter. Pesan ini digunakan dengan cara yang ditentukan implementasi.

Windows PowerShell: Pesan digunakan sebagai bagian dari deskripsi parameter untuk topik bantuan yang ditampilkan oleh cmdlet [Get-Help](xref:Microsoft.PowerShell.Core.Get-Help).

Nilai (yang diberi nama)

Jenis: objek

Argumen ini menentukan nilai yang dimaksudkan untuk menjadi nilai default parameter. Nilai digunakan dengan cara yang ditentukan implementasi.

Windows PowerShell: Nilai digunakan sebagai bagian dari deskripsi parameter untuk topik bantuan yang ditampilkan oleh [Get-Help](xref:Microsoft.PowerShell.Core.Get-Help)cmdlet ketika properti Bantuan tidak ditentukan.

12.3.9 Atribut SupportsWildcards

Atribut ini digunakan dalam parameter skrip untuk memberikan informasi tambahan tentang parameter. Atribut digunakan dengan cara yang ditentukan implementasi.

Atribut ini digunakan sebagai bagian dari deskripsi parameter untuk topik bantuan yang ditampilkan oleh cmdlet Get-Help .

12.3.10 Atribut ValidateCount

Atribut ini digunakan dalam parameter skrip untuk menentukan jumlah minimum dan maksimum nilai argumen yang dapat diterima parameter. Argumen berikut digunakan untuk menentukan karakteristik parameter:

Nama Parameter Tujuan
MinLength (posisi 0)

Jenis: int

Argumen ini menentukan jumlah minimum nilai argumen yang diizinkan.

MaxLength (posisi 1)

Jenis: int

Argumen ini menentukan jumlah maksimum nilai argumen yang diizinkan.

Dengan tidak adanya atribut ini, daftar nilai argumen parameter yang sesuai dapat memiliki panjang berapa pun.

Pertimbangkan uji panggilan fungsi yang memiliki blok param berikut, dan yang dipanggil seperti yang ditunjukkan:

param (
    [ValidateCount(2, 5)]
    [int[]] $Values
)

Temp 10, 20, 30
Temp 10                         # too few argument values
Temp 10, 20, 30, 40, 50, 60     # too many argument values

[ValidateCount(3, 4)]$Array = 1..3
$Array = 10                     # too few argument values
$Array = 1..100                 # too many argument values

12.3.11 Atribut ValidateLength

Atribut ini digunakan dalam parameter skrip atau variabel untuk menentukan panjang minimum dan maksimum argumen parameter, yang harus memiliki string jenis. Argumen berikut digunakan untuk menentukan karakteristik parameter:

Nama Parameter Tujuan
MinLength (posisi 0)

Jenis: int

Argumen ini menentukan jumlah minimum karakter yang diizinkan.

MaxLength (posisi 1)

Jenis: int

Argumen ini menentukan jumlah maksimum karakter yang diizinkan.

Dengan tidak adanya atribut ini, argumen parameter yang sesuai dapat memiliki panjang apa pun.

Pertimbangkan uji panggilan fungsi yang memiliki blok param berikut, dan yang dipanggil seperti yang ditunjukkan:

param ( [Parameter(Mandatory = $true)]
[ValidateLength(3,6)]
[string[]] $ComputerName )

Test "Thor","Mars"     # length is ok
Test "Io","Mars"       # "Io" is too short
Test "Thor","Jupiter"  # "Jupiter" is too long

12.3.12 Atribut ValidateNotNull

Atribut ini digunakan dalam parameter skrip atau variabel untuk menentukan bahwa argumen parameter tidak dapat $null atau menjadi koleksi yang berisi elemen bernilai null.

Pertimbangkan fungsi panggilan Test yang memiliki blok parameter berikut, yang dipanggil seperti ditunjukkan:

param (
    [ValidateNotNull()]
    [string[]] $Names
)

Test "Jack", "Jill"     # ok
Test "Jane", $null      # $null array element value not allowed
Test $null              # null array not allowed

[ValidateNotNull()]$Name = "Jack" # ok
$Name = $null           # null value not allowed

12.3.13 Atribut ValidateNotNullOrEmpty

Atribut ini digunakan dalam parameter skrip atau variabel untuk menentukan bahwa argumen jika parameter tidak dapat $null, string kosong, atau array kosong, atau menjadi koleksi yang berisi elemen string yang bernilai $null atau kosong.

Pertimbangkan panggilan fungsi Test yang memiliki blok parameter berikut, dan dipanggil seperti yang ditunjukkan:

param (
    [ValidateNotNullOrEmpty()]
    [string[]] $Names
)

Test "Jack", "Jill"    # ok
Test "Mary", ""        # empty string not allowed
Test "Jane", $null     # $null array element value not allowed
Test $null             # null array not allowed
Test @()               # empty array not allowed

[ValidateNotNullOrEmpty()]$Name = "Jack" # ok
$Name = ""             # empty string not allowed
$Name = $null          # null value not allowed

12.3.14 Atribut ValidatePattern

Atribut ini digunakan dalam parameter skrip atau variabel untuk menentukan ekspresi reguler untuk mencocokkan pola argumen parameter. Argumen berikut digunakan untuk menentukan karakteristik parameter:

Nama Parameter Tujuan
RegexString (posisi 0)

Jenis: String

Ekspresi reguler yang digunakan untuk memvalidasi argumen parameter

Opsi yang diberi nama

Jenis: Reguler-Expression-Option

Lihat [§4.2.6.4][§4.2.6.4] untuk nilai yang diizinkan.

Jika argumen adalah koleksi, setiap elemen dalam koleksi harus cocok dengan pola.

Pertimbangkan panggilan fungsi Test yang memiliki blok parameter berikut, dan dipanggil seperti yang ditunjukkan:

param (
    [ValidatePattern('\^[A-Z][1-5][0-9]$')]
    [string] $Code,

    [ValidatePattern('\^(0x|0X)([A-F]|[a-f]|[0-9])([A-F]|[a-f]|[0-9])$')]
    [string] $HexNum,

    [ValidatePattern('\^[+|-]?[1-9]$')]
    [int] $Minimum
)

Test -C A12 # matches pattern
Test -C A63 # does not match pattern

Test -H 0x4f # matches pattern
Test -H "0XB2" # matches pattern
Test -H 0xK3 # does not match pattern

Test -M -4 # matches pattern
Test -M "+7" # matches pattern
Test -M -12 # matches pattern, but is too long

[ValidatePattern('\^[a-z][a-z0-9]\*$')]$ident = "abc"
$ident = "123" # does not match pattern

12.3.15 Atribut ValidateRange

Atribut ini digunakan dalam parameter skrip atau variabel untuk menentukan nilai minimum dan maksimum argumen parameter. Argumen berikut digunakan untuk menentukan karakteristik parameter:

Nama Parameter Tujuan
MinRange (posisi 0)

Jenis: objek

Argumen ini menentukan nilai minimum yang diizinkan.

MaxRange (posisi 1)

Jenis: objek

Argumen ini menentukan nilai maksimum yang diizinkan.

Dengan tidak adanya atribut ini, tidak ada batasan rentang.

Pertimbangkan panggilan fungsi Test1 yang memiliki blok parameter berikut, dan dipanggil seperti yang ditunjukkan:

param (
    [Parameter(Mandatory = $true)]
    [ValidateRange(1, 10)]
    [int] $StartValue
)

Test1 2
Test1 -St 7
Test1 -3 # value is too small
Test1 12 # value is too large

Pertimbangkan panggilan fungsi Test2 yang memiliki blok parameter dan panggilan berikut.

param (
    [Parameter(Mandatory = $true)]
    [ValidateRange("b", "f")]
    [string] $Name
)

Test2 "Bravo" # ok
Test2 "Alpha" # value compares less than the minimum
Test2 "Hotel" # value compares greater than the maximum

Pertimbangkan panggilan fungsi Test3 yang memiliki blok parameter berikut, dan dipanggil seperti yang ditunjukkan:

param (
    [Parameter(Mandatory = $true)]
    [ValidateRange(0.002, 0.003)]
    [double] $Distance
)

Test3 0.002
Test3 0.0019    # value is too small
Test3 "0.005"   # value is too large

[ValidateRange(13, 19)]$teenager = 15
$teenager = 20  # value is too large

12.3.16 Atribut ValidateScript

Atribut ini digunakan dalam parameter skrip atau variabel untuk menentukan skrip yang akan digunakan untuk memvalidasi argumen parameter.

Argumen dalam posisi 1 adalah script-block-expression.

Pertimbangkan panggilan fungsi Test yang memiliki blok parameter berikut, dan dipanggil seperti yang ditunjukkan:

param (
    [Parameter(Mandatory = $true)]
    [ValidateScript( { ($_ -ge 1 -and $_ -le 3) -or ($_ -ge 20) })]
    [int] $Count
)

Test 2 # ok, valid value
Test 25 # ok, valid value
Test 5 # invalid value
Test 0 # invalid value

[ValidateScript({$_.Length --gt 7})]$password = "password" # ok
$password = "abc123" # invalid value

12.3.17 Atribut ValidateSet

Atribut ini digunakan dalam parameter skrip atau variabel untuk menentukan sekumpulan nilai yang valid untuk argumen parameter. Argumen berikut digunakan untuk menentukan karakteristik parameter:

Nama Parameter Tujuan
ValidValues (posisi 0)

Jenis: string[]

Kumpulan nilai yang valid.

IgnoreCase (bernama)

Jenis: bool; Nilai bawaan: $true

Menentukan apakah kasus harus diabaikan untuk parameter bertipe string.

Jika parameter memiliki jenis array, setiap elemen array argumen yang sesuai harus cocok dengan elemen dari kumpulan nilai.

Pertimbangkan panggilan fungsi Test yang memiliki blok parameter berikut, dan dipanggil seperti yang ditunjukkan:

param ( [ValidateSet("Red", "Green", "Blue")]
    [string] $Color,

    [ValidateSet("up", "down", "left", "right", IgnoreCase =
        $false)]
    [string] $Direction

)

Test -Col "RED"    # case is ignored, is a member of the set
Test -Col "white"  # case is ignored, is not a member of the set

Test -Dir "up"     # case is not ignored, is a member of the set
Test -Dir "Up"     # case is not ignored, is not a member of the set

[ValidateSet(("Red", "Green", "Blue")]$color = "RED" # ok, case is ignored
$color = "Purple"  # case is ignored, is not a member of the set