質問

これで問題ありません:

$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を使用しないことを受け入れています。それを使用した唯一の理由は、<!> quot; command <!> quot;変数として。

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

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

役に立ちましたか?

解決

引数を個別のパラメーターに分離する必要があります

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

他のヒント

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

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

編集:引用。

警告

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

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

新しいcmdウィンドウから、PowerShellを再度実行し、その中で2番目のcmdウィンドウを開始します。 cmd2 <!> gt; PowerShell

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

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

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

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

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

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

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top