如何让PowerShell保持命令窗口打开?

当我在PowerShell上运行一个程序时,它会打开一个新窗口,在我看到输出之前,窗口closures。 我如何使PowerShell保持这个窗口打开?

尝试做:

start-process your.exe -NoNewWindow 

如果需要,也添加一个-Wait

OP似乎对这个答案满意,但是在执行这个程序之后,它并没有保持新的窗口,这是他似乎要求的(以及我正在寻找的答案)。 所以,经过多番研究,我想出了:

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

几个星期前我正在解决类似的问题。 如果您不想使用&( & '.\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" 

您也可以轻松地重定向输出或实施某种超时,以防您的应用程序可能冻结…

如果程序是使用cmd /c foo.cmd命令启动的批处理文件(.cmd或.bat扩展名),只需将其更改为cmd /k foo.cmd并执行该程序,但提示符保持打开状态。

如果程序不是批处理文件,则将其包装在批处理文件中,并在其末尾添加pause命令。 要将程序包装在批处理文件中,只需将该命令放在一个文本文件中,并为其指定.cmd扩展名。 然后执行,而不是exe。