about_Parameters_Default_Values

Aggiornamento: maggio 2014

Si applica a: Windows PowerShell 3.0, Windows PowerShell 4.0, Windows PowerShell 5.0

ARGOMENTO

about_Parameters_Default_Values

DESCRIZIONE BREVE

In questo articolo viene descritto come impostare valori predefiniti personalizzati per i parametri di cmdlet e funzioni avanzate.

DESCRIZIONE LUNGA

La variabile di preferenza $PSDefaultParameterValues consente di specificare valori predefiniti e personalizzati per tutti i cmdlet o funzioni avanzate. Le funzioni e i cmdlet usano il valore predefinito personalizzato, se non si specifica un valore diverso nel comando.

Gli autori di cmdlet e le funzioni avanzate impostano valori predefiniti standard per i propri parametri. In genere, i valori predefiniti standard sono utili, ma potrebbero non essere appropriati per tutti gli ambienti.

Questa funzione è utile soprattutto quando è necessario specificare lo stesso valore di parametro alternativo ogni volta che si usa il comando oppure quando si rischia di non ricordare il valore di un determinato parametro, ad esempio, il nome server e-mail o il GUID di progetto.

Se il valore predefinito desiderato cambia in modo prevedibile, è possibile specificare un blocco di script che fornisce valori predefiniti diversi per un parametro in condizioni diverse.

$PSDefaultParameterValues è stato introdotto in Windows PowerShell 3.0.

SINTASSI

La sintassi della variabile di preferenza $PSDefaultParameterValues ha l'aspetto seguente:

       $PSDefaultParameterValues=@{"<CmdletName>:<ParameterName>"="<DefaultValue>"}

       $PSDefaultParameterValues=@{"<CmdletName>:<ParameterName>"={<ScriptBlock>}}

       $PSDefaultParameterValues["Disabled"]=$true | $false

I caratteri jolly sono consentiti nei valori CmdletName e ParameterName.

Il valore di $PSDefaultParameterValues è System.Management.Automation.DefaultParameterDictionary, un tipo di tabella hash che consente di convalidare il formato delle chiavi. Immettere una tabella hash nella quale la chiave consiste nel nome del cmdlet e nel nome del parametro separati da due punti (:), mentre il valore rappresenta quello predefinito personalizzato.

Per impostare, modificare, aggiungere o rimuovere voci da $PSDefaultParameterValues, usare i metodi che consentono di modificare una tabella hash standard.

Il valore <CmdletName> deve corrispondere al nome di un cmdlet o al nome di una funzione avanzata che usa l'attributo CmdletBinding. Non è possibile usare $PSDefaultParameterValues per specificare i valori predefiniti per script o funzioni semplici.

Il valore predefinito può essere un oggetto o un blocco di script. Se il valore è un blocco di script, Windows PowerShell valuta il blocco di script e usa il risultato come valore del parametro. Quando il parametro specificato richiede un valore relativo al blocco di script, racchiudere il valore di blocco di script in un secondo set di parentesi graffe, ad esempio: $PSDefaultParameterValues=@{ "Invoke-Command:ScriptBlock"={{Get-Process}} }

Per informazioni sulle tabelle hash, vedere about_Hash_Tables. Per informazioni sui blocchi di script, vedere about_Script_Blocks. Per informazioni sulle variabili di preferenza, vedere about_Preference_Variables.

ESEMPI

Il comando seguente consente di impostare un valore predefinito personalizzato per il parametro SmtpServer del cmdlet Send-MailMessage.

        $PSDefaultParameterValues = @{"Send-MailMessage:SmtpServer"="Server01AB234x5"}

Per impostare i valori predefiniti per più parametri, usare un punto e virgola (;) per separare ogni coppia Name=Value. Il comando seguente consente di aggiungere un valore predefinito personalizzato per il parametro LogName del cmdlet Get-WinEvent.

        $PSDefaultParameterValues = @{"Send-MailMessage:SmtpServer"="Server01AB234x5";
               "Get-WinEvent:LogName"="Microsoft-Windows-PrintService/Operational"}

È possibile usare i caratteri jolly nel nome di cmdlet e parametri. Il comando seguente consente di impostare il parametro comune Verbose su $true in tutti i comandi. Usare $true e $false per impostare valori per i parametri opzionali, ad esempio, Verbose.

        $PSDefaultParameterValues = @{"*:Verbose"=$true}

Se un parametro dispone di più valori (una matrice), è possibile impostare più valore come quello predefinito. Il seguente comando consente di impostare il valore predefinito del parametro ComputerName relativo al cmdlet Invoke-Command su "Server01" e "Server02".

        $PSDefaultParameterValues = @{"Invoke-Command:ComputerName"="Server01","Server02"}

È possibile usare un blocco di script per specificare valori predefiniti diversi per un parametro in condizioni differenti. Windows PowerShell consente di valutare il blocco di script e usa il risultato come valore predefinito del parametro.

Il seguente comando consente di impostare il valore predefinito del parametro Autosize relativo al cmdlet Format-Table su $true quando il programma host è la console di Windows PowerShell.

        $PSDefaultParameterValues=@{"Format-Table:AutoSize"={if ($host.Name –eq "ConsoleHost"){$true}}}

Se il parametro accetta un valore del blocco di script, racchiudere il blocco di script in un set aggiuntivo di parentesi graffe. Quando Windows PowerShell valuta il blocco di script esterno, il risultato è rappresentato dal blocco di script interno, che viene impostato come valore del parametro predefinito.

Il seguente comando consente di impostare il valore predefinito del parametro ScriptBlock di Invoke-Command. Dal momento che il blocco di script è racchiuso in un secondo set di parentesi graffe, il blocco di script incluso viene trasferito al cmdlet Invoke-Command.

        $PSDefaultParameterValues=@{"Invoke-Command:ScriptBlock"={{Get-EventLog –Log System}}}

COME IMPOSTARE $PSDefaultParameterValues

Il valore $PSDefaultParameterValues è una variabile di preferenza, pertanto è presente soltanto nella sessione in cui è impostato. Non dispone di alcun valore predefinito.

Per impostare $PSDefaultParameterValues, digitare il nome della variabile e una o più coppie chiave-valore nella riga di comando.

Se si digita un altro comando $PSDefaultParameterValues, il relativo valore sostituisce quello originale. Il valore originale non viene mantenuto.

Per salvare $PSDefaultParameterValues per le sessioni future, aggiungere un comando $PSDefaultParameterValues al profilo Windows PowerShell. Per altre informazioni, vedere about_Profiles.

COME VISUALIZZARE $PSDefaultParameterValues

Per visualizzare il valore di $PSDefaultParameterValues, al prompt dei comandi digitare: $PSDefaultParameterValues

Ad esempio, il primo comando consente di impostare il valore di $PSDefaultParameterValues. Il secondo comando consente di visualizzare il valore di $PSDefaultParameterValues.

        PS C:\> $PSDefaultParameterValues = @{"Send-MailMessage:SmtpServer"="Server01AB234x5";
                "Get-WinEvent:LogName"="Microsoft-Windows-PrintService/Operational";
                "Get-*:Verbose"=$true}

        PS C:\> $PSDefaultParameterValues

        Name                           Value
        ----                           -----
        Send-MailMessage:SmtpServer    Server01AB234x5
        Get-WinEvent:LogName           Microsoft-Windows-PrintService/Operational
        Get*:Verbose                   True

Per visualizzare il valore di una chiave <CmdletName:ParameterName>, usare la sintassi del comando seguente:

       $PSDefaultParameterValues["<CmdletName:ParameterName>"]

Ad esempio:

       PS C:\> $PSDefaultParameterValues["Send-MailMessage:SmtpServer"]
       Server01AB234x5   

COME AGGIUNGERE VALORI A $PSDefaultParameterValues

Per aggiungere o eliminare valori da $PSDefaultParameterValues, usare i metodi previsti una tabella hash standard.

Per aggiungere un valore a $PSDefaultParameterValues senza modificare i valori esistenti, usare il metodo Add per tabelle hash.

La sintassi del metodo Add è analoga alla seguente:

        <HashTable>.Add(Key, Value)

dove la chiave è rappresentata da "<CmdletName>:<ParameterName>" mentre il valore corrisponde a quello del parametro.

Usare il formato di comando seguente per chiamare il metodo Add su $PSDefaultParameterValues. Assicurarsi di usare una virgola (,) per separare la chiave dal valore, anziché il segno di uguale (=).

        $PSDefaultParameterValues.Add("<CmdletName>:<ParameterName>", "<ParameterValue>")

Ad esempio, il comando seguente aggiunge "PowerShell" come valore predefinito del parametro Name del cmdlet Get-Process.

        $PSDefaultParameterValues.Add("Get-Process:Name", "PowerShell")

Nell'esempio seguente viene illustrato l'effetto del comando.

        PS C:\> $PSDefaultParameterValues

        Name                           Value
        ----                           -----
        Send-MailMessage:SmtpServer    Server01AB234x5
        Get-WinEvent:LogName           Microsoft-Windows-PrintService/Operational
        Get*:Verbose                   True

        PS C:\> $PSDefaultParameterValues.Add("Get-Process:Name", "PowerShell")

        PS C:\> $PSDefaultParameterValues

        Name                           Value
        ----                           -----
        Get-Process:Name               PowerShell
        Send-MailMessage:SmtpServer    Server01AB234x5
        Get-WinEvent:LogName           Microsoft-Windows-PrintService/Operational
        Get*:Verbose                   True

COME ELIMINARE VALORI DA $PSDefaultParameterValues

Per eliminare un valore da $PSDefaultParameterValues, usare il metodo Remove di tabelle hash.

La sintassi del metodo Remove è analoga alla seguente:

        <HashTable>.Remove(Key)

Usare il formato di comando seguente per chiamare il metodo Remove su $PSDefaultParameterValues.

        $PSDefaultParameterValues.Remove("<CmdletName>:<ParameterName>")

Ad esempio, il comando seguente elimina il parametro Name del cmdlet Get-Process e i relativi valori.

        $PSDefaultParameterValues.Remove("Get-Process:Name")

Nell'esempio seguente viene illustrato l'effetto del comando.

        PS C:\> $PSDefaultParameterValues

        Name                           Value
        ----                           -----
        Get-Process:Name               PowerShell
        Send-MailMessage:SmtpServer    Server01AB234x5
        Get-WinEvent:LogName           Microsoft-Windows-PrintService/Operational
        Get*:Verbose                   True

        PS C:\> $PSDefaultParameterValues.Remove("Get-Process:Name")

        PS C:\> $PSDefaultParameterValues

        Name                           Value
        ----                           -----
        Send-MailMessage:SmtpServer    Server01AB234x5
        Get-WinEvent:LogName           Microsoft-Windows-PrintService/Operational
        Get*:Verbose                   True

COME MODIFICARE I VALORI IN $PSDefaultParameterValues

Per modificare un valore in $PSDefaultParameterValues, usare il comando seguente.

        $PSDefaultParameterValues["CmdletName:ParameterName"]="<NewValue>"

Nell'esempio seguente viene illustrato l'effetto del comando.

        PS C:\> $PSDefaultParameterValues

        Name                           Value
        ----                           -----
        Send-MailMessage:SmtpServer    Server01AB234x5
        Get-WinEvent:LogName           Microsoft-Windows-PrintService/Operational
        Get*:Verbose                   True

        PS C:\> $PSDefaultParameterValues["Send-MailMessage:SmtpServer"]="Server0000cabx5"
   
        PS C:\> $PSDefaultParameterValues

        Name                           Value
        ----                           -----
        Send-MailMessage:SmtpServer    Server0000cabx5
        Get-WinEvent:LogName           Microsoft-Windows-PrintService/Operational
        Get*:Verbose                   True

COME DISABILITARE E RIABILITARE $PSDefaultParameterValues

È possibile disabilitare temporaneamente e riabilitare $PSDefaultParameterValues. Tale operazione è molto utile se si eseguono script che potrebbero disporre di valori di parametro predefiniti diversi.

Per disabilitare $PSDefaultParameterValues, aggiungere una chiave "Disabled" con un valore di $True.

Ad esempio:

        $PSDefaultParameterValues.Add("Disabled", $true)

        - or -

        $PSDefaultParameterValues[Disabled]=$true

Gli altri valori $PSDefaultParameterValues vengono mantenuti, ma non validi.

        PS C:\> $PSDefaultParameterValues

        Name                           Value
        ----                           -----
        Disabled                       True
        Send-MailMessage:SmtpServer    Server0000cabx5
        Get-WinEvent:LogName           Microsoft-Windows-PrintService/Operational
        Get*:Verbose                   True

Per abilitare nuovamente $PSDefaultParameterValues, rimuovere la chiave Disabled oppure modificare il valore della chiave Disabled in $False.

        $PSDefaultParameterValues.Remove("Disabled")

- or -

        $PSDefaultParameterValues[Disabled]=$false

Il valore precedente di $PSDefaultParameterValues è di nuovo valido.

PAROLE CHIAVE

about_PSDefaultParameterValues

about_Parameters_DefaultValues

about_DefaultValues

VEDERE ANCHE

about_Hash_Tables

about_Preference_Variables

about_Profiles

about_Script_Blocks