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
)
このスクリプトは最初のパラメーターを要求しませんが、デフォルト値を処理します。
これがshortの例です。
[CmdletBinding()]
Param(
$SqlServiceAccount = (Read-Host -Prompt "SqlServiceAccount ($($env:computername + "_sa"))"),
$SqlServiceAccountPwd = (Read-Host -Prompt "SqlServiceAccountPwd")
)
if (!$SqlServiceAccount) { $SqlServiceAccount = $env:Computername + "_sa" }
...
必須パラメーターとpowershellプロンプトを使用して、必要なことを行う方法はありません。
代わりに、オプションにする(必須を削除する)必要があります。次に、プロンプトコードを自分で実装する必要があります(Read-Host
が、デフォルトとして空白の応答を取ります。そんな感じ)。
定義では、必須パラメーターにはデフォルト値がありません。指定しても、コマンドの呼び出し時に指定されない限り、PowerShellは値の入力を求めます。ただし、求めているものを取得するための「ハッキング」方法があります。変数(およびその結果-パラメーター)には任意の名前を付けることができるため、表示するプロンプトに一致するパラメーターを使用してコマンドを定義するだけで十分です。
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
で呼び出されると、エイリアスが起動され、選択したパラメーターに渡された値が割り当てられます。そのような名前の変数を扱うのは面白くないので、エイリアス/偽のパラメーター名に一致する変数に値(デフォルトまたはユーザーから渡された値)を割り当てるのは理にかなっています。