PowerShell スクリプトから呼び出されたときにパラメーターを正しく解析していないバッチ スクリプト (内部で perl を実行) を呼び出している PowerShell スクリプトがあります。状況は以下の通りです。
バッチ/perl スクリプトを手動で呼び出す場合
test.cmd -tasks "Task A","Task B","Task C"
すべてが正常に機能し、パラメーター「タスク A」、「タスク B」、「タスク C」は、別の実行可能ファイルに渡される 1 つのユニットとして扱われます。
ただし、invoke-expression を使用して呼び出す場合
$fullCommand = "cmd.exe /C C:\test\test.cmd -tasks `"Task A`",`"Task B`",`"Task C`";
Invoke-Expression -Command $fullCommand;
バッチ スクリプトは、各文字列を個別のパラメーターと見なします。つまり、「タスク A」は -tasks の後の最初のパラメーターであり、次に「タスク B」、「タスク C」の順であり、スクリプトは処理方法を認識しません。
各タスク名を個別に渡すことでこれを回避できますが (例: -Task "Task A" -Task "Task B" -Task "Task C")、これらを解析するための追加のロジックが必要になります。配列を文字列に変換し、別の実行可能ファイルに戻します。