about_Parameters_Default_Values
Descrizione breve
Viene descritto come impostare valori predefiniti personalizzati per i parametri dei cmdlet e le funzioni avanzate.
Descrizione lunga
La $PSDefaultParameterValues
variabile preferenza consente di specificare valori predefiniti personalizzati per qualsiasi cmdlet o funzione avanzata. I cmdlet e le funzioni avanzate usano il valore predefinito personalizzato, a meno che non si specifichi un altro valore nel comando.
Gli autori di cmdlet e funzioni avanzate impostano valori predefiniti standard per i relativi parametri. In genere, i valori predefiniti standard sono utili, ma potrebbero non essere appropriati per tutti gli ambienti.
Questa funzionalità è particolarmente utile quando è necessario specificare lo stesso valore di parametro alternativo quasi ogni volta che si usa il comando o quando un determinato valore di parametro è difficile da ricordare, ad esempio un nome del server di posta elettronica o un GUID del progetto.
Se il valore predefinito desiderato varia in modo prevedibile, è possibile specificare un blocco di script che fornisce valori predefiniti diversi per un parametro in condizioni diverse.
$PSDefaultParameterValues
è stato introdotto in PowerShell 3.0.
Sintassi
La $PSDefaultParameterValues
variabile è una tabella hash che convalida il formato delle chiavi come tipo di oggetto System.Management.Automation.DefaultParameterDictionary. La tabella hash contiene coppie Chiave/Valore . Una chiave è nel formato CmdletName:ParameterName
. Un valore è DefaultValue o ScriptBlock assegnato alla chiave.
La sintassi della $PSDefaultParameterValues
variabile di preferenza è la seguente:
$PSDefaultParameterValues=@{"CmdletName:ParameterName"="DefaultValue"}
$PSDefaultParameterValues=@{ "CmdletName:ParameterName"={{ScriptBlock}} }
$PSDefaultParameterValues["Disabled"]=$True | $False
I caratteri jolly sono consentiti nei valori CmdletName e ParameterName .
Per impostare, modificare, aggiungere o rimuovere una coppia chiave/valore specifica da $PSDefaultParameterValues
, usare i metodi per modificare una tabella hash standard. Ad esempio, i metodi Add e Remove . Questi metodi non sovrascrivono altri valori nella tabella hash.
Esiste un'altra sintassi che non sovrascrive una tabella hash esistente $PSDefaultParameterValues
. Per aggiungere o modificare una coppia chiave/valore specifica, usare la sintassi seguente:
$PSDefaultParameterValues["CmdletName:ParameterName"]="DefaultValue"
CmdletName deve essere il nome di un cmdlet o il nome di una funzione avanzata che usa l'attributo CmdletBinding. Non è possibile usare $PSDefaultParameterValues
per specificare i valori predefiniti per script o funzioni semplici.
DefaultValue può essere un oggetto o un blocco di script. Se il valore è un blocco di script, PowerShell valuta il blocco di script e usa il risultato come valore del parametro. Quando il parametro specificato accetta un valore del blocco di script, racchiudere il valore del blocco di script in un secondo set di parentesi graffe, ad esempio:
$PSDefaultParameterValues=@{ "Invoke-Command:ScriptBlock"={{Get-Process}} }
Per altre informazioni, vedere i documenti seguenti:
Esempi
Come impostare $PSDefaultParameterValues
$PSDefaultParameterValues
è una variabile di preferenza, quindi esiste solo nella sessione in cui è impostata. Non ha alcun valore predefinito.
Per impostare $PSDefaultParameterValues
, digitare il nome della variabile e una o più coppie Chiave/Valore . Se si esegue un altro $PSDefaultParameterValues
comando, sovrascrive la tabella hash esistente.
Per esempi su come modificare le coppie chiave/valore senza sovrascrivere i valori della tabella hash esistenti, vedere Come aggiungere valori a $PSDefaultParameterValues o Come modificare i valori in $PSDefaultParameterValues.
Per salvare $PSDefaultParameterValues
le sessioni future, aggiungere un $PSDefaultParameterValues
comando al profilo di PowerShell. Per altre informazioni, vedere about_Profiles.
Impostare un valore predefinito personalizzato
La coppia Chiave/Valore imposta la Send-MailMessage:SmtpServer
chiave su un valore predefinito personalizzato di Server123.
$PSDefaultParameterValues = @{
"Send-MailMessage:SmtpServer"="Server123"
}
Impostare i valori predefiniti per più parametri
Per impostare i valori predefiniti per più parametri, separare ogni coppia Chiave/Valore con un punto e virgola (;
). Le Send-MailMessage:SmtpServer
chiavi e Get-WinEvent:LogName
sono impostate su valori predefiniti personalizzati.
$PSDefaultParameterValues = @{
"Send-MailMessage:SmtpServer"="Server123";
"Get-WinEvent:LogName"="Microsoft-Windows-PrintService/Operational"
}
Usare caratteri jolly e parametri switch
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. Il parametro Verbose del parametro comune è impostato su $True
per tutti i comandi.
$PSDefaultParameterValues = @{"*:Verbose"=$True}
Usare una matrice per il valore predefinito
Se un parametro può accettare più valori, è possibile impostare più valori come valori predefiniti. Il valore predefinito della Invoke-Command:ComputerName
chiave è impostato su un valore di matrice di Server01 e Server02.
$PSDefaultParameterValues = @{
"Invoke-Command:ComputerName"="Server01","Server02"
}
Usare un blocco di script
È 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 Format-Table:AutoSize
chiave imposta il parametro switch su un valore predefinito True. L'istruzione If
contiene una condizione che $host.Name
deve essere la console di PowerShell ConsoleHost.
$PSDefaultParameterValues=@{
"Format-Table:AutoSize"={if ($host.Name -eq "ConsoleHost"){$True}}
}
Se un parametro accetta un valore di blocco di script, racchiudere il blocco di script in un set aggiuntivo di parentesi graffe. Quando PowerShell valuta il blocco di script esterno, il risultato è il blocco di script interno e impostato come valore del parametro predefinito.
La Invoke-Command:ScriptBlock
chiave impostata su un valore predefinito del registro eventi di sistema perché il blocco di script è racchiuso in un secondo set di parentesi graffe. Il risultato del blocco di script viene passato al Invoke-Command
cmdlet .
$PSDefaultParameterValues=@{
"Invoke-Command:ScriptBlock"={{Get-EventLog -Log System}}
}
Come ottenere $PSDefaultParameterValues
I valori della tabella hash vengono visualizzati immettendo $PSDefaultParameterValues
al prompt di PowerShell.
Una $PSDefaultParameterValues
tabella hash viene impostata con tre coppie Chiave/Valore .
Questa tabella hash viene usata negli esempi seguenti che descrivono come aggiungere, modificare e rimuovere valori da $PSDefaultParameterValues
.
PS> $PSDefaultParameterValues = @{
"Send-MailMessage:SmtpServer"="Server123"
"Get-WinEvent:LogName"="Microsoft-Windows-PrintService/Operational"
"Get-*:Verbose"=$True
}
PS> $PSDefaultParameterValues
Name Value
---- -----
Get-WinEvent:LogName Microsoft-Windows-PrintService/Operational
Get-*:Verbose True
Send-MailMessage:SmtpServer Server123
Per ottenere il valore di una chiave specifica CmdletName:ParameterName
, usare la sintassi seguente:
$PSDefaultParameterValues["CmdletName:ParameterName"]
Ad esempio, per ottenere il valore per la Send-MailMessage:SmtpServer
chiave.
PS> $PSDefaultParameterValues["Send-MailMessage:SmtpServer"]
Server123
Come aggiungere valori a $PSDefaultParameterValues
Per aggiungere un valore a $PSDefaultParameterValues
, utilizzare 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. La sintassi seguente illustra come usare il metodo Add per $PSDefaultParameterValues
.
PS> $PSDefaultParameterValues.Add("CmdletName:ParameterName", "DefaultValue")
La tabella hash creata nell'esempio precedente viene aggiornata con una nuova coppia Chiave/Valore . Il metodo Add imposta la Get-Process:Name
chiave sul valore di PowerShell.
$PSDefaultParameterValues.Add("Get-Process:Name", "PowerShell")
La sintassi seguente consente di ottenere lo stesso risultato.
$PSDefaultParameterValues["Get-Process:Name"]="PowerShell"
La $PSDefaultParameterValues
variabile visualizza la tabella hash aggiornata. La Get-Process:Name
chiave è stata aggiunta.
PS> $PSDefaultParameterValues
Name Value
---- -----
Get-Process:Name PowerShell
Get-WinEvent:LogName Microsoft-Windows-PrintService/Operational
Get-*:Verbose True
Send-MailMessage:SmtpServer Server123
Come rimuovere valori da $PSDefaultParameterValues
Per rimuovere un valore da $PSDefaultParameterValues
, utilizzare il metodo Remove delle tabelle hash. La rimozione di un valore non influisce sui valori esistenti della tabella hash.
La sintassi seguente illustra come usare il metodo Remove in $PSDefaultParameterValues
.
PS> $PSDefaultParameterValues.Remove("CmdletName:ParameterName")
In questo esempio la tabella hash creata nell'esempio precedente viene aggiornata per rimuovere una coppia Chiave/Valore . Il metodo Remove rimuove la Get-Process:Name
chiave.
$PSDefaultParameterValues.Remove("Get-Process:Name")
La $PSDefaultParameterValues
variabile visualizza la tabella hash aggiornata. La Get-Process:Name
chiave è stata rimossa.
PS> $PSDefaultParameterValues
Name Value
---- -----
Get-WinEvent:LogName Microsoft-Windows-PrintService/Operational
Get-*:Verbose True
Send-MailMessage:SmtpServer Server123
Come modificare i valori in $PSDefaultParameterValues
Le modifiche apportate a un valore specifico non influiscono sui valori della tabella hash esistenti. Per modificare una coppia chiave/valore specifica in $PSDefaultParameterValues
, usare la sintassi seguente:
PS> $PSDefaultParameterValues["CmdletName:ParameterName"]="DefaultValue"
In questo esempio la tabella hash creata nell'esempio precedente viene aggiornata per modificare una coppia Chiave/Valore . Il comando seguente modifica la Send-MailMessage:SmtpServer
chiave in un nuovo valore di ServerXYZ.
$PSDefaultParameterValues["Send-MailMessage:SmtpServer"]="ServerXYZ"
La $PSDefaultParameterValues
variabile visualizza la tabella hash aggiornata. La Send-MailMessage:SmtpServer
chiave è stata modificata in un nuovo valore.
PS> $PSDefaultParameterValues
Name Value
---- -----
Get-WinEvent:LogName Microsoft-Windows-PrintService/Operational
Get-*:Verbose True
Send-MailMessage:SmtpServer ServerXYZ
Come disabilitare e 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 di Disabled
con un valore True. I valori in $PSDefaultParameterValues
vengono mantenuti, ma non sono efficaci.
PS> $PSDefaultParameterValues.Add("Disabled", $True)
La sintassi seguente consente di ottenere lo stesso risultato.
PS> $PSDefaultParameterValues["Disabled"]=$True
La $PSDefaultParameterValues
variabile visualizza la tabella hash aggiornata con il valore per la Disabled
chiave.
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 Disabilitata o modificare il valore della chiave Disabilitata in $False
. Il valore precedente di $PSDefaultParameterValues
è di nuovo effettivo.
PS> $PSDefaultParameterValues.Remove("Disabled")
La sintassi seguente consente di ottenere lo stesso risultato.
PS> $PSDefaultParameterValues["Disabled"]=$False
La $PSDefaultParameterValues
variabile visualizza la tabella hash aggiornata. Quando si usa il metodo Remove , la Disabled
chiave viene rimossa dall'output.
Se la sintassi alternativa è stata usata per riabilitare $PSDefaultParameterValues
, la Disabled
chiave viene visualizzata come False.
PS> $PSDefaultParameterValues
Name Value
---- -----
Disabled False
Get-WinEvent:LogName Microsoft-Windows-PrintService/Operational
Get-*:Verbose True
Send-MailMessage:SmtpServer ServerXYZ