about_Parameters_Default_Values
Deskripsi singkat
Menjelaskan cara mengatur nilai default kustom untuk parameter cmdlet, fungsi tingkat lanjut, dan skrip.
Deskripsi panjang
Variabel preferensi
Fitur ini berguna dalam skenario berikut:
- menentukan nilai parameter yang sama setiap kali Anda menggunakan perintah
- menentukan nilai parameter tertentu yang sulit diingat, seperti nama server email atau GUID proyek
Variabel $PSDefaultParameterValues
tidak memiliki nilai default. Untuk menyimpan pengaturan untuk digunakan dalam sesi mendatang, tambahkan penetapan variabel ke profil PowerShell Anda.
$PSDefaultParameterValues
diperkenalkan di PowerShell 3.0.
Sintaks
Variabel $PSDefaultParameterValues
adalah jenis objek System.Management.Automation.DefaultParameterDictionary. Jenis DefaultParameterDictionary adalah hashtable dengan beberapa validasi tambahan untuk format kunci. Hashtable berisi pasangan kunci-nilai di mana:
- kunci memiliki format
CommandName:ParameterName
- nilai
adalah nilai default untuk parameter atau ScriptBlock yang mengembalikan nilai default
Untukkunci (Get-Command -Name .\script.ps1).Name
.
Nota
PowerShell tidak mencegah Anda menentukan alias untuk CommandName. Namun, ada kasus di mana definisi diabaikan atau menyebabkan kesalahan. Anda harus menghindari menentukan nilai default untuk alias perintah.
Nilai dapat menjadi objek dari jenis yang kompatibel dengan parameter atau ScriptBlock yang mengembalikan nilai tersebut. Ketika nilai adalah blok skrip, PowerShell mengevaluasi blok skrip dan menggunakan hasil untuk nilai parameter. Jika parameter yang ditentukan mengharapkan jenis ScriptBlock, Anda harus mengapit nilai dalam sepasang kurung kurawal lain. Ketika PowerShell mengevaluasi ScriptBlock luar, hasilnya adalah ScriptBlock dalam. SkripBlock dalam menjadi nilai parameter default baru.
Misalnya:
$PSDefaultParameterValues = @{
'Invoke-Command:ScriptBlock' = { {Get-Process} }
}
Contoh
Gunakan metode Add()
dan Remove()
untuk menambahkan atau menghapus pasangan kunci-nilai tertentu dari $PSDefaultParameterValues
tanpa menimpa pasangan kunci-nilai lain yang ada.
$PSDefaultParameterValues.Add('CmdletName:ParameterName', 'DefaultValue')
$PSDefaultParameterValues.Remove('CmdletName:ParameterName')
Gunakan akses pengindeksan atau anggota untuk mengubah nilai pasangan kunci-nilai yang ada. Misalnya:
$PSDefaultParameterValues.'CommandName:ParameterName'='DefaultValue2'
$PSDefaultParameterValues['CommandName:ParameterName']='DefaultValue1'
Menetapkan nilai pada $PSDefaultParameterValues
Untuk menentukan nilai default untuk parameter cmdlet, tetapkan hashtable yang berisi pasangan kunci-nilai yang sesuai ke variabel $PSDefaultParameterValues
.
Hashtable dapat berisi beberapa pasangan kunci-nilai. Contoh ini menetapkan nilai default untuk kunci Send-MailMessage:SmtpServer
dan Get-WinEvent:LogName
.
$PSDefaultParameterValues = @{
'Send-MailMessage:SmtpServer'='Server123'
'Get-WinEvent:LogName'='Microsoft-Windows-PrintService/Operational'
}
Nama cmdlet dan parameter dapat berisi karakter kartubebas. Gunakan $true
dan $false
untuk mengatur nilai untuk parameter pengalihan, seperti Verbose. Contoh ini mengatur parameter umum Verbose ke $true
untuk semua perintah.
$PSDefaultParameterValues = @{'*:Verbose'=$true}
Jika parameter menerima beberapa nilai, Anda dapat memberikan beberapa nilai default menggunakan array. Contoh ini mengatur nilai default kunci Invoke-Command:ComputerName
ke array yang berisi nilai string Server01
dan Server02
.
$PSDefaultParameterValues = @{
'Invoke-Command:ComputerName' = 'Server01', 'Server02'
}
Menampilkan nilai yang ditentukan
Pertimbangkan definisi $PSDefaultParameterValues
berikut:
$PSDefaultParameterValues = @{
'Send-MailMessage:SmtpServer' = 'Server123'
'Get-WinEvent:LogName' = 'Microsoft-Windows-PrintService/Operational'
'Get-*:Verbose' = $true
}
Anda dapat melihat nilai yang ditentukan dengan memasukkan $PSDefaultParameterValues
di prompt perintah.
PS> $PSDefaultParameterValues
Name Value
---- -----
Get-WinEvent:LogName Microsoft-Windows-PrintService/Operational
Get-*:Verbose True
Send-MailMessage:SmtpServer Server123
Anda dapat menggunakan akses pengindeksan atau anggota untuk mendapatkan nilai tertentu.
PS> $PSDefaultParameterValues['Send-MailMessage:SmtpServer'] # index notation
Server123
PS> $PSDefaultParameterValues.'Get-*:Verbose' # member access notation
True
Menggunakan blok skrip untuk nilai default
Anda dapat menggunakan blok skrip untuk menentukan nilai default yang berbeda untuk parameter dalam kondisi yang berbeda. PowerShell mengevaluasi blok skrip dan menggunakan hasilnya sebagai nilai parameter default.
Kunci Format-Table:AutoSize
mengatur parameter tersebut ke nilai default $true
. Pernyataan if
berisi kondisi bahwa $Host.Name
harus ConsoleHost
.
$PSDefaultParameterValues = @{
'Format-Table:AutoSize' = { if ($Host.Name -eq 'ConsoleHost'){$true} }
}
Jika parameter menerima nilai
$PSDefaultParameterValues = @{
'Invoke-Command:ScriptBlock' = { {Get-EventLog -Log System} }
}
Menambahkan nilai ke variabel $PSDefaultParameterValues
yang sudah ada
Untuk menambahkan nilai ke $PSDefaultParameterValues
, gunakan metode Add()
. Menambahkan nilai tidak memengaruhi nilai hashtable yang ada. Gunakan koma (
$PSDefaultParameterValues.Add('Get-Process:Name', 'PowerShell')
Hashtable yang dibuat dalam contoh sebelumnya diperbarui dengan pasangan kunci-nilai baru.
PS> $PSDefaultParameterValues
Name Value
---- -----
Get-Process:Name PowerShell
Get-WinEvent:LogName Microsoft-Windows-PrintService/Operational
Get-*:Verbose True
Send-MailMessage:SmtpServer Server123
Menghapus nilai dari $PSDefaultParameterValues
Untuk menghapus nilai dari $PSDefaultParameterValues
, gunakan metode Remove()
.
Menghapus nilai tidak memengaruhi nilai hashtable yang ada.
Contoh ini menghapus pasangan kunci-nilai yang ditambahkan dalam contoh sebelumnya.
PS> $PSDefaultParameterValues.Remove('Get-Process:Name')
PS> $PSDefaultParameterValues
Name Value
---- -----
Get-WinEvent:LogName Microsoft-Windows-PrintService/Operational
Get-*:Verbose True
Send-MailMessage:SmtpServer Server123
Mengubah nilai dalam $PSDefaultParameterValues
Gunakan akses pengindeksan atau anggota untuk mengubah nilai default pasangan kunci-nilai yang ada. Dalam contoh ini, nilai default untuk kunci Send-MailMessage:SmtpServer
diubah ke nilai baru ServerXYZ.
PS> $PSDefaultParameterValues['Send-MailMessage:SmtpServer']='ServerXYZ'
PS> $PSDefaultParameterValues
Name Value
---- -----
Get-WinEvent:LogName Microsoft-Windows-PrintService/Operational
Get-*:Verbose True
Send-MailMessage:SmtpServer ServerXYZ
Menonaktifkan atau mengaktifkan kembali $PSDefaultParameterValues
Anda dapat menonaktifkan sementara lalu mengaktifkan $PSDefaultParameterValues
kembali .
$PSDefaultParameterValues
Menonaktifkan berguna jika Anda menjalankan skrip yang memerlukan nilai parameter default yang berbeda.
Untuk menonaktifkan $PSDefaultParameterValues
, tambahkan kunci Disabled
dengan nilai $true
. Nilai dalam $PSDefaultParameterValues
dipertahankan, tetapi tidak digunakan.
PS> $PSDefaultParameterValues.Add('Disabled', $true)
PS> $PSDefaultParameterValues
Name Value
---- -----
Disabled True
Get-WinEvent:LogName Microsoft-Windows-PrintService/Operational
Get-*:Verbose True
Send-MailMessage:SmtpServer ServerXYZ
Untuk mengaktifkan kembali $PSDefaultParameterValues
, hapus kunci Disabled
atau ubah nilai kunci Disabled
menjadi $false
.
PS> $PSDefaultParameterValues.Disabled = $false
PS> $PSDefaultParameterValues
Name Value
---- -----
Disabled False
Get-WinEvent:LogName Microsoft-Windows-PrintService/Operational
Get-*:Verbose True
Send-MailMessage:SmtpServer ServerXYZ