当我在PowerShell上运行程序时,它会打开一个新窗口,在我看到输出内容之前,这个窗口就自动关闭了。我该如何让PowerShell保持此窗口打开呢?
尝试执行以下操作:
start-process your.exe -NoNewWindow
如果需要,添加-Wait
。
start-process 'full path to\your.exe' -NoNewWindow
,命令按预期运行。 - Dan-Verb RunAs
参数集导致了一个 AmbiguousParameterSet 错误。 - jrbe228楼主对回答似乎很满意,但是在执行程序后它并没有保持新窗口打开,这好像是他想要的(也是我正在寻找的答案)。因此,经过更多的研究,我得出了以下结论:
Start-Process cmd "/c `"your.exe & pause `""
Start-Process "powershell" -wait -ArgumentList "tree 'D:' ; pause"
。 - larkee几周前,我解决了类似的问题。如果你不想使用 & (& '.\program.exe'
),那么你可以使用 start-process 并通过 start-process 读取输出(在那里你显式地读取输出)。
将此作为单独的 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"
您还可以轻松地重定向输出或者在应用程序可能冻结的情况下实施某种类型的超时处理...
pwsh -noe -c "echo 1"
$arguments = {
"Get-process"
"Hello"
Read-Host "Wait for a key to be pressed"
}
Start-Process powershell -Verb runAs -ArgumentList $arguments