2

複数の引数を取る可能性のある複数のパラメーターを、次の形式で同時に呼び出したいスクリプトがあります。

.\MyScript.ps1 -q <int> --args <hostval1> <hostval2> ... <hostvaln>

現在、「q」以外のパラメーターがありますが、「--args」パラメーターは必要ありません。現在、次のようにパラメーターを定義しているため、「--args」を実装する方法がわかりません。

param(
    [Alias('c')]
    [string]$csv,
    [Alias('h')]
    [switch]$help,
    [Alias('f')]
    [switch]$fields,
    [Alias('s')]
    [string]$sql,
    [Alias('q')]
    [int]$query
)

次のように実行してホスト値を取得できることはわかっていますが、ダッシュが必要になります。

.\MyScript.ps1 -q 1 -hostval1 -hostval3 -hostval4

これにより、

$args[0] = -hostval1
$args[1] = -hostval3
$args[2] = -hostval4

「-q」でのみ呼び出すことができ、スペースで区切られた複数の値を受け入れる「セカンダリ」パラメーター (例: --args) を作成する方法はありますか? 別のパラメーターを作成することもできますが、これにより、「-q」パラメーターなしで誤って呼び出される可能性があり、引数の間にコンマが必要になります。

[string[]]$hostvals

私がやろうとしていることはpowershellで可能ですか? 私に何ができるか考えている人はいますか?

4

1 に答える 1

2

パラメータセット名で試すことができます:

[CmdletBinding(DefaultParameterSetName="Q")]

param(    
    [Alias('c')]
    [string]$csv,   
    [Alias('h')]
    [switch]$help,    
    [Alias('f')]
    [switch]$fields,    
    [Alias('s')]
    [string]$sql,   
    [Parameter(ParameterSetName="Q", mandatory=$true)] 
    [Alias('q')]
    [int]$query,
    [Parameter(ParameterSetName="Q")] 
    [object[]]$arg        
)

このように、パラメーターのみを使用して関数を呼び出すことはできません。呼び出しも-arg必要です。-query

$arg配列を受け入れる場合、コンマで区切られたホスト値を入力できます。スペースで区切られた値が必要な場合は、引用符で値を宣言して渡すことができますが、スクリプト内で入力を有効[string]$argにするために、いくつかのロジック (スペースなど) を追加する必要があります。split

スクリプトにカスタム ヘルプを追加するには、http://blogs.technet.com/b/heyscriptingguy/archive/2010/01/07/hey-scripting-guy-january-7-2010.aspxを参照してください。

于 2013-01-22T19:07:39.070 に答える