[英]powershell mandatory parameter with default value shown
我正在尋找一種方法讓 PowerShell 腳本請求一個參數,該參數需要是強制性的,但顯示一個默認值,例如:
.\psscript
Supply values for the following parameters:
parameter1[default value]:
parameter2[1234]:
我想要求輸入但提供一些默認值。
如果我使用強制選項,它會很好地要求值,但不會顯示默認值或處理給定值。 如果我沒有強制要求,那么 PowerShell 根本不會要求該值。
這是我嘗試過的一些腳本示例:
[CmdletBinding()]
Param(
[parameter(Mandatory=$true)] $SqlServiceAccount = $env:computername + "_sa",
[parameter(Mandatory=$true)] $SqlServiceAccountPwd
)
如果我只是在第一個參數上按 Enter 鍵,此腳本會詢問參數,但不會顯示或處理默認值。
[CmdletBinding()]
Param(
[parameter(Mandatory=$false)] $SqlServiceAccount = $env:computername + "_sa",
[parameter(Mandatory=$true)] $SqlServiceAccountPwd
)
這個腳本不要求第一個參數,而是處理默認值。
根據定義:強制參數沒有默認值。 即使您提供了一個,除非在調用命令時指定,否則 PowerShell 也會提示輸入值。 然而,有一種“hacky”的方式來獲得你所要求的東西。 由於變量(以及因此 - 參數)可以具有您希望的任何名稱,因此使用與您希望看到的提示匹配的參數來定義命令就足夠了:
function foo {
param (
[Parameter(Mandatory = $true)]
[Alias('Parameter1')]
[AllowNull()]
${Parameter1[default value]},
[Parameter(Mandatory = $true)]
[Alias('Parameter2')]
[AllowNull()]
${Parameter2[1234]}
)
$Parameter1 =
if (${Parameter1[default value]}) {
${Parameter1[default value]}
} else {
'default value'
}
$Parameter2 =
if (${Parameter2[1234]}) {
${Parameter2[1234]}
} else {
1234
}
[PSCustomObject]@{
Parameter1 = $Parameter1
Parameter2 = $Parameter2
}
}
當調用不帶參數時,函數將向用戶顯示匹配參數名稱的提示。 當使用-Parameter1 notDefaultValue
和/或使用-Parameter2 7
,別名將啟動並將傳遞的值分配給所選參數。 由於這樣命名的變量使用起來並不有趣 - 將值(默認值或由用戶傳遞)分配給與我們的別名/假參數名稱匹配的變量是有意義的。
這是一個可能有幫助的簡短示例:
[CmdletBinding()]
Param(
$SqlServiceAccount = (Read-Host -prompt "SqlServiceAccount ($($env:computername + "_sa"))"),
$SqlServiceAccountPwd = (Read-Host -prompt "SqlServiceAccountPwd")
)
if (!$SqlServiceAccount) { $SqlServiceAccount = $env:Computername + "_sa" }
...
沒有辦法通過強制參數和 powershell 提示來做你想做的事。
相反,您必須將其設為可選(刪除強制性),然后自己實現提示代碼( Read-Host
,但將空白響應作為默認值;類似的東西)。
我會這樣做
param(
[Parameter(Mandatory)][string]$aString
)
if([string]::IsNullOrWhiteSpace($aString))
{
$aString = "A Default Value"
}
在我看來,如果您在param()
塊中使用Read-Host
,那么您就做錯了。 那時,使用param()
的意義何在?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.