about_Parameters_Default_Values

適用於: Windows PowerShell 3.0, Windows PowerShell 4.0, Windows PowerShell 5.0

主題

about_Parameters_Default_Values

簡短描述

描述如何為 Cmdlet 和進階函式的參數設定自訂的預設值。

詳細描述

$PSDefaultParameterValues 喜好設定變數可讓您為任何 Cmdlet 和進階函式指定自訂的預設值。除非您在命令中指定其他值,否則 Cmdlet 和函式會使用自訂的預設值。

Cmdlet 和進階函式的作者會為其參數設定標準預設值。通常標準預設值都很有用,但不一定適合所有環境。

如果您幾乎每次使用此命令時,都必須指定相同的替代參數值,或是很難記住特定參數值 (例如電子郵件伺服器名稱或專案 GUID) 時,此功能會特別好用。

如果可以預測所需預設值的變化,您可以指定指令碼區塊,針對不同情況下的參數提供不同的預設值。

$PSDefaultParameterValues 是在 Windows PowerShell 3.0 中引進。

語法

$PSDefaultParameterValues 喜好設定變數的語法如下所示:

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

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

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

CmdletName 和 ParameterName 值中可允許萬用字元。

$PSDefaultParameterValues 的值是 System.Management.Automation.DefaultParameterDictionary,這是一種驗證機碼格式的雜湊表。請輸入雜湊表,其中機碼是由 Cmdlet 名稱和參數名稱組成 (以冒號 (:) 分隔),而值是自訂的預設值。

若要從 $PSDefaultParameterValues 設定、變更、新增或移除項目,請使用您要用來編輯標準雜湊表的方法。

<CmdletName> 必須是 Cmdlet 名稱,或是使用 CmdletBinding 屬性的進階函式名稱。您不能使用 $PSDefaultParameterValues 來指定指令碼或簡單函式的預設值。

預設值可以是物件或指令碼區塊。如果值為指令碼區塊,則 Windows PowerShell 會評估指令碼區塊,並使用其結果做為參數值。當指定的參數使用指令碼區塊值時,請以第二組大括弧來括住指令碼區塊值,例如:$PSDefaultParameterValues=@{ "Invoke-Command:ScriptBlock"={{Get-Process}} }

如需雜湊表的相關資訊,請參閱 about_Hash_Tables。如需指令碼區塊的相關資訊,請參閱 about_Script_Blocks。如需喜好設定變數的相關資訊,請參閱 about_Preference_Variables。

範例

下列命令會為 Send-MailMessage Cmdlet 的 SmtpServer 參數設定自訂預設值。

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

若要為多個參數設定預設值,請使用分號 (;) 將每個「名稱=值」組隔開。下列命令會為 Get-WinEvent Cmdlet 的 LogName 參數新增自訂預設值。

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

您可以在 Cmdlet 和參數的名稱中使用萬用字元。下列命令會在所有命令中,將 Verbose 一般參數設為 $true。您可以使用 $true 和 $false 來設定切換參數的值,例如 Verbose。

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

如果參數使用多個值 (陣列),您可以將多個值設為預設值。下列命令會將 Invoke-Command Cmdlet 的 ComputerName 參數預設值設為 "Server01" 和 "Server02"。

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

您可以使用指令碼區塊,針對不同情況下的參數,指定不同的預設值。Windows PowerShell 會評估指令碼區塊,並使用其結果做為預設參數值。

當主機程式為 Windows PowerShell 主控台時,下列命令會將 Format-Table Cmdlet 的 Autosize 參數預設值設為 $true。

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

如果參數使用指令碼區塊值,請使用另一組大括弧來括住指令碼區塊。當 Windows PowerShell 評估外部指令碼區塊時,結果就是內部指令碼區塊,其已設為預設參數值。

下列命令會設定 Invoke-Command 的 ScriptBlock 參數預設值。因為指令碼區塊是以第二組大括弧括住,所以括住的指令碼區塊會傳遞至 Invoke-Command Cmdlet。

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

如何設定 $PSDefaultParameterValues

$PSDefaultParameterValues 是喜好設定變數,因此只存在於設定該變數的工作階段中。它沒有預設值。

若要設定 $PSDefaultParameterValues,請在命令列輸入變數名稱,以及一個或多個「機碼-值」組。

如果您輸入另一個 $PSDefaultParameterValues 命令,其值會取代原始值。不保留原始值。

若要儲存 $PSDefaultParameterValues 供未來工作階段使用,請新增 $PSDefaultParameterValues 命令至您的 Windows PowerShell 設定檔。如需詳細資訊,請參閱 about_Profiles。

如何取得 $PSDefaultParameterValues

若要取得 $PSDefaultParameterValues 的值,請在命令提示字元中輸入:$PSDefaultParameterValues

例如,第一個命令會設定 $PSDefaultParameterValues 的值。第二個命令會取得 $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

若要取得 <CmdletName:ParameterName> 機碼的值,請使用下列命令語法:

       $PSDefaultParameterValues["<CmdletName:ParameterName>"]

例如:

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

如何新增值至 $PSDefaultParameterValues

若要在 $PSDefaultParameterValues 中新增或移除值,請使用您要用於標準雜湊表的方法。

例如,若要新增值至 $PSDefaultParameterValues,而不影響現有的值,請使用雜湊表的 Add 方法。

Add 方法的語法如下所示:

        <HashTable>.Add(Key, Value)

其中 Key 是 "<CmdletName>:<ParameterName>",而值是參數值。

您可以使用下列命令格式,在 $PSDefaultParameterValues 上呼叫 Add 方法。請務必使用逗號 (,) 將機碼和值分隔,而不是使用等號 (=)。

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

例如,下列命令會新增 "PowerShell",做為 Get-Process Cmdlet 的 Name 參數預設值。

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

下列範例會顯示此命令的效果。

        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

如何從 $PSDefaultParameterValues 移除值

若要從 $PSDefaultParameterValues 移除值,請使用雜湊表的 Remove 方法。

Remove 方法的語法如下所示:

        <HashTable>.Remove(Key)

您可以使用下列命令格式,在 $PSDefaultParameterValues 上呼叫 Remove 方法。

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

例如,下列命令會移除 Get-Process Cmdlet 的 Name 參數及其值。

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

下列範例會顯示此命令的效果。

        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

如何變更 $PSDefaultParameterValues 中的值

若要變更 $PSDefaultParameterValues 中的值,請使用下列命令格式。

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

下列範例會顯示此命令的效果。

        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

如何停用及重新啟用 $PSDefaultParameterValues

您可以暫時停用然後再重新啟用 $PSDefaultParameterValues。如果您執行的指令碼可能會假設不同的預設參數值,這會非常有用。

若要停用 $PSDefaultParameterValues,請新增 "Disabled" 機碼和 $True 值。

例如,

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

        - or -

        $PSDefaultParameterValues[Disabled]=$true

$PSDefaultParameterValues 中的其他值會保留,但無效。

        PS C:\> $PSDefaultParameterValues

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

若要重新啟用 $PSDefaultParameterValues,請移除 Disabled 機碼,或將 Disabled 機碼的值變更為 $False。

        $PSDefaultParameterValues.Remove("Disabled")

- or -

        $PSDefaultParameterValues[Disabled]=$false

$PSDefaultParameterValues 先前的值就會再生效。

關鍵字

about_PSDefaultParameterValues

about_Parameters_DefaultValues

about_DefaultValues

另請參閱

about_Hash_Tables

about_Preference_Variables

about_Profiles

about_Script_Blocks