PowerShellスクリプトを使用してEXEファイルを実行しようとしています。コマンドラインを使用すると、問題なく機能します(最初に実行可能ファイルの名前と一連のパラメーターを指定して呼び出します)。
"C:\Program Files\Automated QA\TestExecute 8\Bin\TestExecute.exe" C:\temp\TestProject1\TestProject1.pjs /run /exit /SilentMode
ただし、スクリプト内でまったく同じことを行うとエラーが返されます。
term '"C:\ Program Files\Automated QA\TestExecute 8\Bin\TestExecute.exe" C:\ temp\TestProject1\TestProject1.pjs/run/exit/SilentMode 'は、コマンドレット、関数、スクリプトファイル、または操作可能なプログラムの名前として認識されません。名前のスペルを確認するか、パスが含まれていた場合は、パスが正しいことを確認して再試行してください。
(「&」演算子を使用してコマンドを呼び出しました。)
この問題を修正するにはどうすればよいですか?
& "C:\Program Files\Automated QA\TestExecute 8\Bin\TestExecute.exe" C:\temp\TestProject1\TestProject1.pjs /run /exit /SilentMode
または
[System.Diagnostics.Process]::Start("C:\Program Files\Automated QA\TestExecute 8\Bin\TestExecute.exe", "C:\temp\TestProject1\TestProject1.pjs /run /exit /SilentMode")
更新:申し訳ありませんが、「(「&」演算子を使用してコマンドを呼び出しました)」文を逃しました。パスを動的に評価していたときにこの問題が発生しました。 Invoke-Expressionの構築を試してください。
Invoke-Expression "& `"C:\Program Files\Automated QA\TestExecute 8\Bin\TestExecute.exe`" C:\temp\TestProject1\TestProject1.pjs /run /exit /SilentMode"
単一の文字列でEXEとその最初の引数の両方を指定しているようです。 '"C:\Program Files\Automated QA\TestExecute 8\Bin\TestExecute.exe" C:\temp\TestProject1\TestProject1.pjs /run /exit /SilentMode'
。これは機能しません。一般に、次のようにパスにスペースがあるネイティブコマンドを呼び出します。
& "c:\some path with spaces\foo.exe" <arguments go here>
つまり、&
の後には、コマンドレット、関数、ネイティブexeの相対パスまたは絶対パスなどのコマンドを識別する文字列が続くことを想定しています。
これが機能するようになったら:
& "c:\some path with spaces\foo.exe"
必要に応じて、引数の引用の作業を開始します。引数は問題ないように見えますが(スペースはなく、PowerShellによって解釈される他の特殊文字もありません)。
Powershellで、.exeファイルの場所に移動します。例えば:
cd C:\ Users\Administrators\Downloads
PS C:\ Users\Administrators\Downloads> & '。\ aaa.exe'
インストーラーがポップアップし、画面の指示に従います。
デモ:
$exePath = $env:NGINX_HOME + '/nginx.exe'
$myArgs = $args.Clone()
$myArgs += '-p'
$myArgs += $env:NGINX_HOME
& $exepath $myArgs