about_Parameters_Default_Values
Descrizione breve
Viene descritto come impostare valori predefiniti personalizzati per i parametri dei cmdlet, le funzioni avanzate e gli script.
Descrizione lunga
La variabile di preferenza $PSDefaultParameterValues
consente di specificare valori di parametro predefiniti personalizzati per qualsiasi cmdlet, funzione avanzata o script che usa l'attributo CmdletBinding. I valori definiti vengono usati a meno che non si specifichino altri valori nella riga di comando.
Questa funzionalità è utile negli scenari seguenti:
- specificare lo stesso valore del parametro ogni volta che si usa il comando
- specificare un valore di parametro specifico difficile da ricordare, ad esempio un nome del server di posta elettronica o un GUID del progetto
La variabile $PSDefaultParameterValues
non ha alcun valore predefinito. Per salvare le impostazioni da usare nelle sessioni future, aggiungere l'assegnazione di variabile al profilo di PowerShell.
$PSDefaultParameterValues
è stato introdotto in PowerShell 3.0.
Sintassi
La variabile $PSDefaultParameterValues
è un tipo di oggetto di System.Management.Automation.DefaultParameterDictionary. Il tipo DefaultParameterDictionary è una tabella hash con una convalida aggiuntiva per il formato delle chiavi. La tabella hash contiene coppie chiave-valore in cui:
- Il tasto ha il formato
CommandName:ParameterName
- il valore è il valore predefinito per il parametro o un ScriptBlock che restituisce il valore predefinito
Per la chiave , CommandName deve essere il nome di un cmdlet, di una funzione avanzata o di un file di script che usa l'attributo CmdletBinding. Il nome dello script deve corrispondere al nome riportato da (Get-Command -Name .\script.ps1).Name
.
Nota
PowerShell non impedisce di specificare un alias per CommandName. Tuttavia, esistono casi in cui la definizione viene ignorata o causa un errore. È consigliabile evitare di definire i valori predefiniti per gli alias dei comandi.
Il valore può essere un oggetto di un tipo compatibile con il parametro o un ScriptBlock che restituisce tale valore. Quando il valore è un blocco di script, PowerShell valuta il blocco di script e usa il risultato per il valore del parametro. Se il parametro specificato richiede un tipo ScriptBlock, è necessario racchiudere il valore tra un altro paio di parentesi graffe. Quando PowerShell valuta l'outer ScriptBlock, il risultato è l'inner ScriptBlock. Il ScriptBlock interno diventa il nuovo valore predefinito del parametro.
Per esempio:
$PSDefaultParameterValues = @{
'Invoke-Command:ScriptBlock' = { {Get-Process} }
}
Esempi
Usare i metodi Add()
e Remove()
per aggiungere o rimuovere una coppia chiave-valore specifica da $PSDefaultParameterValues
senza sovrascrivere altre coppie chiave-valore esistenti.
$PSDefaultParameterValues.Add('CmdletName:ParameterName', 'DefaultValue')
$PSDefaultParameterValues.Remove('CmdletName:ParameterName')
Usare l'indicizzazione o l'accesso ai membri per modificare il valore di una coppia chiave-valore esistente. Per esempio:
$PSDefaultParameterValues.'CommandName:ParameterName'='DefaultValue2'
$PSDefaultParameterValues['CommandName:ParameterName']='DefaultValue1'
Assegnare valori a $PSDefaultParameterValues
Per definire i valori predefiniti per i parametri del cmdlet, assegnare una tabella hash contenente le coppie chiave-valore appropriate alla variabile $PSDefaultParameterValues
.
La tabella hash può contenere più coppie chiave-valore. In questo esempio vengono impostati i valori predefiniti per le chiavi Send-MailMessage:SmtpServer
e Get-WinEvent:LogName
.
$PSDefaultParameterValues = @{
'Send-MailMessage:SmtpServer'='Server123'
'Get-WinEvent:LogName'='Microsoft-Windows-PrintService/Operational'
}
I nomi dei cmdlet e dei parametri possono contenere caratteri jolly. Usare $true
e $false
per impostare i valori per i parametri switch, ad esempio Verbose. Questo esempio imposta il parametro comune Dettagliato su $true
per tutti i comandi.
$PSDefaultParameterValues = @{'*:Verbose'=$true}
Se un parametro accetta più valori, è possibile specificare più valori predefiniti usando una matrice. In questo esempio il valore predefinito della chiave Invoke-Command:ComputerName
viene impostato su una matrice contenente i valori stringa Server01
e Server02
.
$PSDefaultParameterValues = @{
'Invoke-Command:ComputerName' = 'Server01', 'Server02'
}
Visualizzare i valori definiti
Si consideri la definizione seguente di $PSDefaultParameterValues
:
$PSDefaultParameterValues = @{
'Send-MailMessage:SmtpServer' = 'Server123'
'Get-WinEvent:LogName' = 'Microsoft-Windows-PrintService/Operational'
'Get-*:Verbose' = $true
}
È possibile visualizzare i valori definiti immettendo $PSDefaultParameterValues
al prompt dei comandi.
PS> $PSDefaultParameterValues
Name Value
---- -----
Get-WinEvent:LogName Microsoft-Windows-PrintService/Operational
Get-*:Verbose True
Send-MailMessage:SmtpServer Server123
È possibile usare l'accesso all'indicizzazione o ai membri per ottenere un valore specifico.
PS> $PSDefaultParameterValues['Send-MailMessage:SmtpServer'] # index notation
Server123
PS> $PSDefaultParameterValues.'Get-*:Verbose' # member access notation
True
Usare un blocco di script per il valore predefinito
È possibile usare un blocco di script per specificare valori predefiniti diversi per un parametro in condizioni diverse. PowerShell valuta il blocco di script e usa il risultato come valore del parametro predefinito.
La chiave Format-Table:AutoSize
imposta il parametro switch su un valore predefinito di $true
L'istruzione if
contiene una condizione che il $Host.Name
deve essere ConsoleHost
.
$PSDefaultParameterValues = @{
'Format-Table:AutoSize' = { if ($Host.Name -eq 'ConsoleHost'){$true} }
}
Se un parametro accetta un valore ScriptBlock, racchiudi il ScriptBlock in un altro set di parentesi graffe. Quando PowerShell valuta l'outer ScriptBlock, il risultato è l'inner ScriptBlock. Il ScriptBlock interno diventa il nuovo valore predefinito del parametro.
$PSDefaultParameterValues = @{
'Invoke-Command:ScriptBlock' = { {Get-EventLog -Log System} }
}
Aggiungere valori a una variabile di $PSDefaultParameterValues
esistente
Per aggiungere un valore a $PSDefaultParameterValues
, usare il metodo Add()
. L'aggiunta di un valore non influisce sui valori esistenti della tabella hash. Usare una virgola (,
) per separare la chiave dal valore .
$PSDefaultParameterValues.Add('Get-Process:Name', 'PowerShell')
La tabella hash creata nell'esempio precedente viene aggiornata con una nuova coppia chiave-valore.
PS> $PSDefaultParameterValues
Name Value
---- -----
Get-Process:Name PowerShell
Get-WinEvent:LogName Microsoft-Windows-PrintService/Operational
Get-*:Verbose True
Send-MailMessage:SmtpServer Server123
Rimuovere un valore da $PSDefaultParameterValues
Per rimuovere un valore da $PSDefaultParameterValues
, usare il metodo Remove()
.
La rimozione di un valore non influisce sui valori esistenti della tabella hash.
In questo esempio viene rimossa la coppia chiave-valore aggiunta nell'esempio precedente.
PS> $PSDefaultParameterValues.Remove('Get-Process:Name')
PS> $PSDefaultParameterValues
Name Value
---- -----
Get-WinEvent:LogName Microsoft-Windows-PrintService/Operational
Get-*:Verbose True
Send-MailMessage:SmtpServer Server123
Modificare un valore in $PSDefaultParameterValues
Usare l'indicizzazione o l'accesso ai membri per modificare il valore predefinito di una coppia chiave-valore esistente. In questo esempio, il valore predefinito per la chiave di Send-MailMessage:SmtpServer
viene modificato in un nuovo valore di 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
Disabilitare o riabilitare $PSDefaultParameterValues
È possibile disabilitare temporaneamente e quindi riabilitare $PSDefaultParameterValues
.
La disabilitazione $PSDefaultParameterValues
è utile se si eseguono script che richiedono valori di parametro predefiniti diversi.
Per disabilitare $PSDefaultParameterValues
, aggiungere una chiave Disabled
con il valore $true
. I valori in $PSDefaultParameterValues
vengono mantenuti, ma non vengono usati.
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
Per riabilitare $PSDefaultParameterValues
, rimuovere la chiave Disabled
o modificare il valore della chiave Disabled
in $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