Bagikan melalui


about_Parameters_Default_Values

Deskripsi singkat

Menjelaskan cara mengatur nilai default kustom untuk parameter cmdlet, fungsi tingkat lanjut, dan skrip.

Deskripsi panjang

Variabel preferensi memungkinkan Anda menentukan nilai parameter default kustom untuk cmdlet, fungsi tingkat lanjut, atau skrip apa pun yang menggunakan atribut CmdletBinding . Nilai yang ditentukan digunakan kecuali Anda menentukan nilai lain pada baris perintah.

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 , CommandName harus berupa nama file cmdlet, fungsi tingkat lanjut, atau skrip yang menggunakan atribut CmdletBinding. Nama skrip harus cocok dengan nama seperti yang dilaporkan oleh (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 $PSDefaultParameterValuesberikut:

$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 ScriptBlock, sertakan ScriptBlock dalam sekumpulan kurung kurawal lain. Ketika PowerShell mengevaluasi ScriptBlock luar, hasilnya adalah ScriptBlock dalam. SkripBlock dalam menjadi nilai parameter default baru.

$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 () untuk memisahkan kunci dari nilai .

$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 $PSDefaultParameterValueskembali . $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

Lihat juga