2017-10-17 6 views
0

Powershellでのパラメータ受け渡しの動作を理解できません。Powershellコマンドが動的に構築されました - パラメータ渡しの問題

言って、私はスクリプトcallScript.ps1

param($a="DefaultA",$b="DefaultB") 
echo $a, $b 

言って、別のスクリプトがcallScript.ps1を呼び出しています。

.\callScript.ps1 
# outputs DefaultA followed by DefaultB as expected 
.\callScript.ps1 -a 2 -b 3 
# outputs 2 followed by 3 as expected 
$arguments='-a 2 -b 3' 
callScript.ps1 $arguments 
# I expected output as previous statement but it is as follows. 
# -a 2 -b 3 
# DefaultB 

上記のようにコマンドを動的に構築することでPowerShellスクリプトを実行するにはどうすればよいですか? $argumentsというスクリプトがという変数がcallScript.ps1という変数に解釈される理由を説明してください。あなたは本当にあなたが持っているとしてそれを行うために必要な場合には、PARAM内の値を指定する必要が$a

のためのパラメータとして

'-a 2 -b 3':ここで何が起こっている

+0

。したがって、DefaultB(これは欠落しています)にフォールバックしています。私は代わりに配列を受け入れるように関数をリファクタリングすることを検討すべきだと思います。少なくとも、引数を1つの引数として渡す必要があるのであれば、少なくとも。 – Akaino

答えて

1

は、文字列を渡しているということです上記の値の配列で取るために、あなたもあなたの機能を変更することができInvoke-Expression(ショートiex

function doprint { 
    param($a,$b) 
    $a ; $b 
} 

$arg = '-a "yes" -b "no"' 

"doprint $arg" | iex 

を使用して、あなたがこれを行うことができます(ただし、より良い方法は間違いなくあります)このように:

function doprint { 
    param([string[]]$a) 
    $a[0] ; $a[1] 
} 

$arg = @('yes','no') 

doprint $arg 
1

すでにスクリプトが2つのparamsを期待しているようあなたは、単一の文字列を渡すことはできません、ほのめかしてきたように - のparam $bはデフォルト値をとりながら文字列は、PARAM $aのための入力とし、 。

ただし、引数を含む単純なハッシュテーブルを作成し、splattingを使用してスクリプトに渡すことはできます。あなたのコードに

変更は最小限である:あなたがあなたに2つのパラメータを期待しているスクリプトを単一の文字列を渡している

[email protected]{a="2";b="3"} 

callScript.ps1 @arguments 
関連する問題