1
ユーザに入力(ウェブアドレス、ユーザ名、パスワードなど)を促し、それらの入力を検証したり、ユーザに再度プロンプトを出すスクリプトがあります。サブルーチンへのオプションパラメータの受け渡し
ここでは、これらのパラメータのいくつかをコマンドラインで提供しながら、オプションのパラメータとしてそれらを元のサブルーチンに渡すことで、このスクリプトを呼び出すことができます。しかし、スクリプトの範囲では、パラメータが$PSBoundParameters.ContainsKey('a')
で供給されたかどうかをテストすることができますが、パラメータ$a
(まだ提供されていない可能性があります)を関数に渡すと、同じテストは常に$True
を返します。
サンプルコード:
function main {
param (
[string]$a
)
if ($PSBoundParameters.ContainsKey('a')) {
"main - a is $a"
}
else {
"main - didn't get a"
}
getStr $a
}
function getStr {
param (
[string]$a
)
if ($PSBoundParameters.ContainsKey('a')) {
"getStr - a is $a"
}
else {
"getStr - didn't get a"
}
}
入力:
main
main "hello"
予想される出力:
main - didn't get a
getStr - didn't get a
main - a is hello
getStr - a is hello
実際の出力:
main - didn't get a
getStr - a is
main - a is hello
getStr - a is hello
私の推測では、getStr $a
を呼び出すとき$a
がインスタンス化されることで、これを処理するために、よりエレガント/正しい方法はありますか?
が述べたように、これは問題を解決し、ありがとうございます。もし私が - 各サブルーチンが1つだけをチェックする必要があるいくつかのパラメータを得るかもしれないケースはどうですか? –
将来参照するには、自分自身でこれをテストしたところ、各関数にスプラット( '@') 'PSBoundVariables'を送信して、必要なキーをチェックします。 –