web-dev-qa-db-ja.com

PowerShellでコマンドウィンドウを開いたままにする方法は?

PowerShellでプログラムを実行すると、新しいウィンドウが開き、出力が表示される前にウィンドウが閉じます。 PowerShellがこのウィンドウを開いたままにするようにするにはどうすればよいですか?

15
Erman

やってみてください:

start-process your.exe -NoNewWindow

必要に応じて-Waitも追加します。

9
manojlds

OPは答えに満足しているように見えましたが、プログラムの実行後に新しいウィンドウが開いたままになりません。これは、彼が求めているように見えました(そして私が探していた答えです)。それで、もう少し調査した後、私は思いついた:

Start-Process cmd "/c `"your.exe & pause `""
5
Cary

私は数週間前に同様の問題を解決していました。 &(& '.\program.exe')を使用したくない場合は、開始プロセスを使用して、開始プロセスごとに出力を読み取ることができます(出力を明示的に読み取る場合)。

これを別のPS1ファイルとして配置するだけです-たとえば(またはマクロに):

param (
    $name,
    $params
)

$process = New-Object System.Diagnostics.Process
$proInfo = New-Object System.Diagnostics.ProcessStartInfo
$proInfo.CreateNoWindow = $true
$proInfo.RedirectStandardOutput = $true
$proInfo.RedirectStandardError = $true
$proInfo.UseShellExecute = $false
$proInfo.FileName = $name
$proInfo.Arguments = $params
$process.StartInfo = $proInfo

#Register an Action for Error Output Data Received Event
Register-ObjectEvent -InputObject $process -EventName ErrorDataReceived -action {
    foreach ($s in $EventArgs.data) { Write-Host $s -ForegroundColor Red }
} | Out-Null

#Register an Action for Standard Output Data Received Event
Register-ObjectEvent -InputObject $process -EventName OutputDataReceived -action {
    foreach ($s in $EventArgs.data) { Write-Host $s -ForegroundColor Blue }
} | Out-Null

$process.Start() | Out-Null
$process.BeginOutputReadLine()
$process.BeginErrorReadLine()
$process.WaitForExit()

そしてそれを次のように呼びます:

.\startprocess.ps1 "c:\program.exe" "params"

また、アプリケーションがフリーズする可能性がある場合に備えて、出力を簡単にリダイレクトしたり、何らかのタイムアウトを実装したりすることもできます...

3
Tomas Panik

プログラムがcmd /c foo.cmdコマンドで起動されるバッチファイル(.cmdまたは.bat拡張子)の場合は、単にcmd /k foo.cmdに変更するとプログラムが実行されますが、プロンプトは開いたままになります。

プログラムがバッチファイルでない場合は、バッチファイルでラップし、最後にpauseコマンドを追加します。プログラムをバッチファイルでラップするには、コマンドをテキストファイルに配置し、拡張子を.cmdにします。次に、exeの代わりにそれを実行します。

2
Justin Dearing