84

私はこれをうまく実行できます:

$msbuild = "C:\WINDOWS\Microsoft.NET\Framework\v3.5\MSBuild.exe" 
start-process $msbuild -wait

しかし、このコード (以下) を実行すると、エラーが発生します。

$msbuild = "C:\WINDOWS\Microsoft.NET\Framework\v3.5\MSBuild.exe /v:q /nologo" 
start-process $msbuild -wait

start-process を使用して MSBuild にパラメーターを渡す方法はありますか? 私は start-process を使用しないことにオープンです。使用した唯一の理由は、「コマンド」を変数として持つ必要があったためです。


C:\WINDOWS\Microsoft.NET\Framework\v3.5\MSBuild.exe /v:q /nologoという行が単独である場合、それはPowershell
でどのように処理されますか?

代わりに、ある種の eval() 種類の関数を使用する必要がありますか?

4

5 に答える 5

129

引数を別々のパラメータに分けたいと思うでしょう

$msbuild = "C:\WINDOWS\Microsoft.NET\Framework\v3.5\MSBuild.exe"
$arguments = "/v:q /nologo"
start-process $msbuild $arguments 
于 2009-03-16T17:07:28.653 に答える
65

明示的なパラメータを使用すると、次のようになります。

$msbuild = 'C:\WINDOWS\Microsoft.NET\Framework\v3.5\MSBuild.exe'
start-Process -FilePath $msbuild -ArgumentList '/v:q','/nologo'

編集:引用符。

于 2009-03-16T17:10:00.283 に答える
8

警告

Powershell によって作成された cmd.exe ウィンドウから PowerShell を実行すると、2 番目のインスタンスがジョブの完了を待機しなくなりました。

cmd>  PowerShell
PS> Start-Process cmd.exe -Wait 

ここで、新しいコマンド ウィンドウから PowerShell を再度実行し、その中で 2 つ目のコマンド ウィンドウを開始します: cmd2> PowerShell

PS> Start-Process cmd.exe -Wait
PS>   

PowerShell の 2 番目のインスタンスは -Wait 要求を受け入れなくなり、すべてのバックグラウンド プロセス/ジョブは、まだ実行中であっても「完了」ステータスを返します。

C# エクスプローラー プログラムを使用して cmd.exe ウィンドウを開き、そのウィンドウから PS を実行すると、-Wait 要求も無視されることがわかりました。cmd.exe の「win32 ジョブ」である PowerShell は、待機要求を受け入れていないようです。

Windows 7/x64のPowerShellバージョン3.0でこれに遭遇しました

于 2013-01-08T19:04:06.910 に答える
5

特に呼び出されたアプリケーションからの出力をパイプする必要がある場合 (特に、msbuild とは異なり、ロギングが組み込まれていない場合)、代わりに cmd を使用するとうまく機能することがわかりました。

cmd /C "$msbuild $args" >> $outputfile

于 2011-08-30T06:53:05.833 に答える
2

OP が PowerShell Community Extensions を使用していない限り、Start-Process コマンドレットと他のコマンドレットを提供します。この場合、Glennular のソリューションは pscx\start-process の位置パラメータと一致するため、うまく機能します: -path (position 1) -arguments (position 2)。

于 2009-03-22T06:17:52.347 に答える