この基本的なパターンに従う引数を受け入れる powershell (2.0) スクリプトを作成しようとしています。
.\{script name} [options] PATH
options は、任意の数のオプションのパラメーターです。詳細については、「-v」の行に沿って考えてください。PATH 引数は、最後に渡された引数であり、必須です。オプションなしで引数を 1 つだけ指定してスクリプトを呼び出すことができ、その引数はパスであると見なされます。オプションのパラメーターのみを含み、位置指定もされていないパラメーター リストの設定に問題があります。
この簡単なスクリプトは、私が抱えている問題を示しています。
#param test script
Param(
$firstArg,
$secondArg,
[switch]$thirdArg,
[Parameter(ValueFromRemainingArguments = $true)]
$remainingArgs)
write-host "first arg is $firstArg"
write-host "second arg is $secondArg"
write-host "third arg is $thirdArg"
write-host "remaining: $remainingArgs"
次のように呼び出された場合:
.\param-test.ps1 firstValue secondValue
スクリプトは次を出力します。
first arg is firstValue
second arg is secondValue
third arg is False
remaining:
私が作成しようとしている動作では、両方の引数がオプションのパラメーターを通過し、remainingArgs 変数になります。
この質問/回答は、目的の動作を実現する方法を提供してくれましたが、少なくとも 1 つの必須パラメーターがあり、それが他のすべての引数の 前にある場合にのみ機能するようです。
firstArg を必須にし、位置を 0 に指定することで、この動作を実証できます。
#param test script
Param(
[Parameter(Mandatory=$true, Position = 0)]
$firstArg,
$secondArg,
[switch]$thirdArg,
[Parameter(ValueFromRemainingArguments = $true)]
$remainingArgs)
write-host "first arg is $firstArg"
write-host "second arg is $secondArg"
write-host "third arg is $thirdArg"
write-host "remaining: $remainingArgs"
前と同じ入力で実行します。
.\param-test.ps1 firstValue secondValue
出力は次のとおりです。
first arg is firstValue
second arg is
third arg is False
remaining: secondValue
最初の必須の引数が割り当てられ、残ったものはすべて失敗します。
問題は次のとおりです。すべてのパラメーターがオプションであり、いずれも位置指定されないようにパラメーター リストを設定するにはどうすればよいですか?