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

Vedi anche