Condividi tramite


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

Vedi anche