PowerShellスクリプトを使用してEXEファイルを実行する


111

PowerShellスクリプトを使用してEXEファイルを実行しようとしています。コマンドラインを使用すると、問題なく動作します(最初に、実行可能ファイルの名前と一連のパラメーターを指定して呼び出します)。

"C:\Program Files\Automated QA\TestExecute 8\Bin\TestExecute.exe" C:\temp\TestProject1\TestProject1.pjs /run /exit /SilentMode

しかし、スクリプト内でまったく同じことを行うと、エラーが返されます。

用語 ' "C:\プログラムファイル\自動QA \ TestExecute 8 \ビン\ TestExecute.exe" C:\ TEMP \ TestProject1 \ TestProject1.pjs /実行/終了/ SilentModeは、' コマンドレットの名前として認識されない、機能、スクリプトファイル、または操作可能なプログラム。名前のスペルを確認するか、パスが含まれていた場合は、パスが正しいことを確認して、再試行してください。

(「&」演算子を使用してコマンドを呼び出しました。)

この問題を解決するにはどうすればよいですか?


4
コードを投稿してください。問題がそこにあるので、それを見るのは推測するよりはるかに簡単です。
Cody Grey

回答:


122
& "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"

元の質問のコマンドは、ほぼ正確に、PS2.0のVMで動作します。しかし、同じコマンドがPS4.0システムで失敗するようになりました。興味深いことに、私はTestExecuteも呼び出しています。私はオプション2が一番好きだと思います、私はそれを試してあげます、ありがとう!
EJA 2014年

33

たとえば、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によって解釈されるその他の特殊文字はありません)。


2
スクリプトとexeが同じフォルダーにある場合、絶対パスなしでpowershellスクリプトを実行する方法はありますか?または、相対パスを使用することは可能ですか?
グアノメ2012

7
exeが同じフォルダーにある場合、これ.\foo.exeを行うことができ..\..\foo.exe、相対パスとスペースを含む相対パスを使用することもできます& '..\..\path with spaces\foo.exe'
キース・ヒル

あなたが持っている場合は、パイプあなたのコマンドでは、あなたは引用符を使用する必要がありますより:cmd /c "C:\temp\strarc.exe -cjd:M:\ | C:\temp\strarc.exe -s:8 -xd:N:\"
larkee 2014

2

Powershellで、.exeファイルの場所にcdします。例えば:

cd C:\ Users \ Administrators \ Downloads

PS C:\ Users \ Administrators \ Downloads> & '。\ aaa.exe'

インストーラーがポップアップし、画面の指示に従います。


まさに私が欲しいもの!.exeファイルと '。\ aaa.exe'を実行する
Sharif Yazdian

2
  1. $ argsを複製
  2. 新しい配列に引数をプッシュします
  3. &$ path $ args

デモ:

$exePath = $env:NGINX_HOME + '/nginx.exe'
$myArgs = $args.Clone()

$myArgs += '-p'
$myArgs += $env:NGINX_HOME

& $exepath $myArgs

Thx @nodoccatは、非常に長い引数リストを使用してdockerコマンドを起動するのと同じように機能しました。
danidemi

1

開発者ではないので、1行で複数のpsコマンドを実行することで解決策を見つけました。例えば:

powershell "& 'c:\path with spaces\to\executable.exe' -arguments ; second command ; etc

&(アンパサンド)の前に "(二重引用符)を置くと、実行可能ファイルが実行されます。どの例でも、これは言及されていません。二重引用符がないと、psプロンプトが開き、入力を待ちます。


こんにちはリチャード。回答のフォーマットを改善できますか?編集モードでは、フォーマットのヘルプが表示されますので、ご覧ください。
Dorian Turba
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.