複数の引数を使用するスクリプトがあり、その中には空白が含まれています。スクリプトは別のスクリプトから呼び出されます。したがって、呼び出し元のスクリプトの変数から引数を渡します。Powershell:引数に複数の値(スペースを含む)を渡します。
$script = "C:\Path\script.ps1"
$arg1 = "SomeValue"
$arg2 = "1234"
$arg3 = @("Value1","Some Value","Value 2")
$arg4 = $true
Invoke-Command $script -Arg1 $arg1 -Arg2 $arg2 -Arg3 $arg3 -Arg4 $arg4
と呼ばれるスクリプトは次のようになります:
param (
[Parameter(Mandatory=$false,Position=0)]
[String]$arg1,
[Parameter(Mandatory=$false,Position=1)]
[String]$arg2,
[Parameter(Mandatory=$false,Position=2)]
[array]$arg3,
[Parameter(Mandatory=$false,Position=3)]
[bool]$arg4
)
# Do stuff with the arguments
私はスクリプトを呼び出すと、私は次のエラーを取得する:
"A positional parameter cannot be found that accepts argument 'Some'."
私がしましたスクリプトを呼び出す
以下のようにPowerShellのウィンドウで手動でスクリプトを呼び出す(呼び出し元のスクリプトをバイパスする):
powershell.exe -ExecutionPolicy bypass C:\Path\script.ps1 -Arg1 "SomeValue" -Arg2 "1234" -Arg3 @("Value1","Some Value","Value 2") -Arg4 $true
powershell.exe -ExecutionPolicy bypass C:\Path\script.ps1 -Arg1 "SomeValue" -Arg2 "1234" -Arg3 "Value1","Some Value","Value 2" -Arg4 $true
powershell.exe -ExecutionPolicy bypass C:\Path\script.ps1 -Arg1 "SomeValue" -Arg2 "1234" -Arg3 "Value1","SomeValue","Value2" -Arg4 $true
powershell.exe -ExecutionPolicy bypass C:\Path\script.ps1 -Arg1 "SomeValue" -Arg2 "1234" -Arg3 "Value1,SomeValue,Value2" -Arg4 $true
これらのバリエーションはありません。また、Arg3の値を(、$ args)に変更することでhereというアイデアを試してみましたが、うまくいきません。私はまた、hereのようにパラメータの種類を変更しましたが、それもうまくいきませんでした。
目的は、引数/パラメータを使用して複数の変数(スペースを含む)をスクリプトに渡すことです。
EDIT 12/22/16:この目標には、ショートカット/入力コマンドから同じ情報を渡すことが含まれます。たとえば、私の呼び出しスクリプトは、呼び出されたスクリプトを参照するためにレジストリにRunOnceエントリを作成し、上の手動の例と同様に引数を呼び出しに配置します。それらのどれも働かない。用
Set-ItemProperty $RegROPath "(Default)" -Value "powershell.exe -ExecutionPolicy Bypass $scriptPath $argumentList" -type String
'たpowershell.exe -ExecutionPolicyバイパス - % "C:\パス\ script.ps1 -arg1 \" someValueの\」 -Arg2 \ "1234 \" --Arg3 \ "値1 \"、\ "一部の値\"、\ "値2 \" -Arg4 $ true "' – PetSerAl
こんにちはPetSerAl、私はこれをプログラム的に構築するので、スプラット配列から来る。 – McKenning
できます。どこでも適切なエスケープを適用するだけです。 – PetSerAl