about_Parameters_Default_Values
簡短描述
描述如何設定 Cmdlet 參數和進階函式的自定義預設值。
詳細描述
$PSDefaultParameterValues
喜好設定變數可讓您指定任何 Cmdlet 或進階函式的自定義預設值。 除非您在命令中指定另一個值,否則 Cmdlet 和進階函式會使用自定義預設值。
Cmdlet 和進階函式的作者會為其參數設定標準預設值。 一般而言,標準預設值很有用,但可能不適用於所有環境。
當您幾乎每次使用 命令或特定參數值難以記住時,此功能特別有用,例如電子郵件伺服器名稱或專案 GUID。
如果所需的預設值可以預測,您可以指定腳本區塊,為不同條件下的參數提供不同的預設值。
$PSDefaultParameterValues
已在 PowerShell 3.0 中引進。
語法
$PSDefaultParameterValues
變數是哈希表,會將索引鍵的格式驗證為 System.Management.Automation.DefaultParameterDictionary 的物件類型。 哈希表包含 索引鍵/值 組。 索引 鍵 格式 CmdletName:ParameterName
為 。 Value 是指派給密鑰的 DefaultValue 或 ScriptBlock。
喜好設定變數的 $PSDefaultParameterValues
語法如下所示:
$PSDefaultParameterValues=@{"CmdletName:ParameterName"="DefaultValue"}
$PSDefaultParameterValues=@{ "CmdletName:ParameterName"={{ScriptBlock}} }
$PSDefaultParameterValues["Disabled"]=$True | $False
CmdletName 和 ParameterName 值允許通配符。
若要從 $PSDefaultParameterValues
設定、變更、新增或移除特定的索引鍵/值組,請使用 方法來編輯標準哈希表。 例如, Add 和 Remove 方法。 這些方法不會覆寫哈希表中的其他值。
有另一個語法不會覆寫現有的 $PSDefaultParameterValues
哈希表。 若要新增或變更特定的 索引鍵/值 組,請使用下列語法:
$PSDefaultParameterValues["CmdletName:ParameterName"]="DefaultValue"
CmdletName 必須是 Cmdlet 的名稱,或是使用 CmdletBinding 屬性的進階函式名稱。 您無法使用 $PSDefaultParameterValues
指定文稿或簡單函式的預設值。
DefaultValue 可以是物件或腳本區塊。 如果值是腳本區塊,PowerShell 會評估腳本區塊,並使用結果做為參數值。 當指定的參數接受文稿區塊值時,請將腳本區塊值放在第二組大括弧中,例如:
$PSDefaultParameterValues=@{ "Invoke-Command:ScriptBlock"={{Get-Process}} }
如需詳細資訊,請參閱下列文件:
範例
如何設定$PSDefaultParameterValues
$PSDefaultParameterValues
是喜好設定變數,因此它只存在於設定所在的會話中。 它沒有預設值。
若要設定 $PSDefaultParameterValues
,請輸入變數名稱和一或多個 索引鍵/值 組。 如果您執行另一個 $PSDefaultParameterValues
命令,它會覆寫現有的哈希表。
如需如何變更 索引鍵/值 組而不覆寫現有哈希表值的範例,請參閱 如何將值新增至$PSDefaultParameterValues 或 如何變更$PSDefaultParameterValues中的值。
若要儲存 $PSDefaultParameterValues
未來會話,請將命令新增 $PSDefaultParameterValues
至 PowerShell 配置檔。 如需詳細資訊,請參閱 about_Profiles。
設定自訂預設值
機碼/值組會將Send-MailMessage:SmtpServer
索引鍵設定為 Server123 的自定義預設值。
$PSDefaultParameterValues = @{
"Send-MailMessage:SmtpServer"="Server123"
}
設定多個參數的預設值
若要設定多個參數的預設值,請以分號分隔每個索引鍵/值組。;
Send-MailMessage:SmtpServer
和 Get-WinEvent:LogName
索引鍵會設定為自定義預設值。
$PSDefaultParameterValues = @{
"Send-MailMessage:SmtpServer"="Server123";
"Get-WinEvent:LogName"="Microsoft-Windows-PrintService/Operational"
}
使用通配符和參數
Cmdlet 和參數名稱可以包含通配符。 使用 $True
和 $False
來設定參數的值,例如 Verbose。 通用參數的 Verbose 參數會針對所有命令設定為 $True
。
$PSDefaultParameterValues = @{"*:Verbose"=$True}
使用陣列作為預設值
如果參數可以接受多個值陣列,您可以將多個值設定為預設值。 機碼的Invoke-Command:ComputerName
預設值會設定為 Server01 和 Server02 的陣列值。
$PSDefaultParameterValues = @{
"Invoke-Command:ComputerName"="Server01","Server02"
}
使用腳本區塊
您可以使用文稿區塊,在不同的條件下為參數指定不同的預設值。 PowerShell 會評估腳本區塊,並使用結果作為預設參數值。
索引Format-Table:AutoSize
鍵會將參數切換為 True 的預設值。 If
語句包含的條件必須是 $host.Name
PowerShell主控台 ConsoleHost。
$PSDefaultParameterValues=@{
"Format-Table:AutoSize"={if ($host.Name -eq "ConsoleHost"){$True}}
}
如果參數接受腳本區塊值,請將腳本區塊括在一組額外的大括弧中。 當 PowerShell 評估外部腳本區塊時,結果會是內部腳本區塊,且設定為預設參數值。
索引Invoke-Command:ScriptBlock
鍵會設定為 System 事件記錄檔的預設值,因為腳本區塊會以第二組大括弧括住。 腳本區塊的結果會傳遞至 Invoke-Command
Cmdlet。
$PSDefaultParameterValues=@{
"Invoke-Command:ScriptBlock"={{Get-EventLog -Log System}}
}
如何取得$PSDefaultParameterValues
哈希表值會藉由在PowerShell提示字元中輸入 $PSDefaultParameterValues
來顯示。
哈希表會設定三個$PSDefaultParameterValues
索引鍵/值組。
下列範例會使用此哈希表,說明如何從 $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
若要取得特定 CmdletName:ParameterName
索引鍵的值,請使用下列語法:
$PSDefaultParameterValues["CmdletName:ParameterName"]
例如,若要取得索引鍵的值 Send-MailMessage:SmtpServer
。
PS> $PSDefaultParameterValues["Send-MailMessage:SmtpServer"]
Server123
如何將值新增至$PSDefaultParameterValues
若要將值新增至 $PSDefaultParameterValues
,請使用 Add 方法。 加入值不會影響哈希表的現有值。
使用逗號 (,
) 來分隔 索引鍵 與 Value。 下列語法示範如何使用的 $PSDefaultParameterValues
Add 方法。
PS> $PSDefaultParameterValues.Add("CmdletName:ParameterName", "DefaultValue")
在先前範例中建立的哈希表會以新的 索引鍵/值 組進行更新。 Add 方法會將Get-Process:Name
索引鍵設定為 PowerShell 值。
$PSDefaultParameterValues.Add("Get-Process:Name", "PowerShell")
下列語法會完成相同的結果。
$PSDefaultParameterValues["Get-Process:Name"]="PowerShell"
變數 $PSDefaultParameterValues
會顯示更新的哈希表。 已 Get-Process:Name
新增金鑰。
PS> $PSDefaultParameterValues
Name Value
---- -----
Get-Process:Name PowerShell
Get-WinEvent:LogName Microsoft-Windows-PrintService/Operational
Get-*:Verbose True
Send-MailMessage:SmtpServer Server123
如何從$PSDefaultParameterValues移除值
若要從 $PSDefaultParameterValues
中移除值,請使用 哈希表的 Remove 方法。 拿掉值不會影響哈希表的現有值。
下列語法示範如何在 上使用 $PSDefaultParameterValues
Remove 方法。
PS> $PSDefaultParameterValues.Remove("CmdletName:ParameterName")
在此範例中,先前範例中建立的哈希表會更新為移除 索引鍵/值 組。 Remove 方法會Get-Process:Name
移除索引鍵。
$PSDefaultParameterValues.Remove("Get-Process:Name")
變數 $PSDefaultParameterValues
會顯示更新的哈希表。 金鑰 Get-Process:Name
已移除。
PS> $PSDefaultParameterValues
Name Value
---- -----
Get-WinEvent:LogName Microsoft-Windows-PrintService/Operational
Get-*:Verbose True
Send-MailMessage:SmtpServer Server123
如何變更$PSDefaultParameterValues中的值
對特定值的變更不會影響現有的哈希表值。 若要在 中$PSDefaultParameterValues
變更特定的索引鍵/值組,請使用下列語法:
PS> $PSDefaultParameterValues["CmdletName:ParameterName"]="DefaultValue"
在此範例中,先前範例中建立的哈希表會更新為變更 索引鍵/值 組。 下列命令會將Send-MailMessage:SmtpServer
索引鍵變更為 ServerXYZ 的新值。
$PSDefaultParameterValues["Send-MailMessage:SmtpServer"]="ServerXYZ"
變數 $PSDefaultParameterValues
會顯示更新的哈希表。 索引 Send-MailMessage:SmtpServer
鍵已變更為新的值。
PS> $PSDefaultParameterValues
Name Value
---- -----
Get-WinEvent:LogName Microsoft-Windows-PrintService/Operational
Get-*:Verbose True
Send-MailMessage:SmtpServer ServerXYZ
如何停用和重新啟用$PSDefaultParameterValues
您可以暫時停用,然後重新啟用 $PSDefaultParameterValues
。
如果您要執行需要不同預設參數值的腳本,停用 $PSDefaultParameterValues
會很有用。
若要停用 $PSDefaultParameterValues
,請新增 值為 True 的 索引鍵Disabled
。 中的 $PSDefaultParameterValues
值會保留,但無效。
PS> $PSDefaultParameterValues.Add("Disabled", $True)
下列語法會完成相同的結果。
PS> $PSDefaultParameterValues["Disabled"]=$True
變數 $PSDefaultParameterValues
會以索引鍵的值顯示更新的 Disabled
哈希表。
PS> $PSDefaultParameterValues
Name Value
---- -----
Disabled True
Get-WinEvent:LogName Microsoft-Windows-PrintService/Operational
Get-*:Verbose True
Send-MailMessage:SmtpServer ServerXYZ
若要重新啟用 $PSDefaultParameterValues
,請移除 Disabled 索引鍵,或將 Disabled 索引鍵的值變更為 $False
。 的先前值 $PSDefaultParameterValues
再次生效。
PS> $PSDefaultParameterValues.Remove("Disabled")
下列語法會完成相同的結果。
PS> $PSDefaultParameterValues["Disabled"]=$False
變數 $PSDefaultParameterValues
會顯示更新的哈希表。 使用 Remove 方法時,會Disabled
從輸出中移除索引鍵。
如果使用替代語法重新啟用 $PSDefaultParameterValues
,索引 Disabled
鍵會顯示為 False。
PS> $PSDefaultParameterValues
Name Value
---- -----
Disabled False
Get-WinEvent:LogName Microsoft-Windows-PrintService/Operational
Get-*:Verbose True
Send-MailMessage:SmtpServer ServerXYZ