当我在PowerShell上运行程序时,它会打开一个新窗口,在我看到输出之前,该窗口会关闭。如何使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。
使用Startprocess和$arguments脚本块,您可以放置一个读取主机
$arguments = {
"Get-process"
"Hello"
Read-Host "Wait for a key to be pressed"
}
Start-Process powershell -Verb runAs -ArgumentList $arguments
pwsh -noe -c "echo 1"