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

vkc1a9a2  于 2023-10-23  发布在  Shell
关注(0)|答案(7)|浏览(231)

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

xkrw2x1b

xkrw2x1b1#

尝试做:

  1. start-process your.exe -NoNewWindow

如果需要,也可以添加-Wait

1tuwyuhd

1tuwyuhd2#

OP似乎对这个答案很满意,但在执行程序后,它并没有保持新窗口打开,这似乎是他所问的(也是我所寻找的答案)。所以,经过更多的研究,我得出了:

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

nwsw7zdq3#

几周前我也遇到过类似的问题。如果你不想使用&(& '.\program.exe'),那么你可以使用start process并通过start process读取输出(在这里你显式地读取输出)。
只是把这个作为单独的PS1文件-例如(或宏):

  1. param (
  2. $name,
  3. $params
  4. )
  5. $process = New-Object System.Diagnostics.Process
  6. $proInfo = New-Object System.Diagnostics.ProcessStartInfo
  7. $proInfo.CreateNoWindow = $true
  8. $proInfo.RedirectStandardOutput = $true
  9. $proInfo.RedirectStandardError = $true
  10. $proInfo.UseShellExecute = $false
  11. $proInfo.FileName = $name
  12. $proInfo.Arguments = $params
  13. $process.StartInfo = $proInfo
  14. #Register an Action for Error Output Data Received Event
  15. Register-ObjectEvent -InputObject $process -EventName ErrorDataReceived -action {
  16. foreach ($s in $EventArgs.data) { Write-Host $s -ForegroundColor Red }
  17. } | Out-Null
  18. #Register an Action for Standard Output Data Received Event
  19. Register-ObjectEvent -InputObject $process -EventName OutputDataReceived -action {
  20. foreach ($s in $EventArgs.data) { Write-Host $s -ForegroundColor Blue }
  21. } | Out-Null
  22. $process.Start() | Out-Null
  23. $process.BeginOutputReadLine()
  24. $process.BeginErrorReadLine()
  25. $process.WaitForExit()

然后这样称呼它:

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

您还可以轻松地重定向输出或实现某种类型的超时,以防您的应用程序冻结。

展开查看全部
v9tzhpje

v9tzhpje4#

如果程序是一个批处理文件(.cmd或.bat扩展名),使用cmd /c foo.cmd命令启动,只需将其更改为cmd /k foo.cmd,程序就会执行,但提示符保持打开状态。
如果程序不是批处理文件,将其 Package 在批处理文件中,并在其末尾添加pause命令。要将程序 Package 在批处理文件中,只需将命令放在文本文件中,并给予.cmd扩展名。然后执行它而不是exe。

sd2nnvve

sd2nnvve5#

使用Startprocess并在$arguments脚本块中,可以将Read-Host

  1. $arguments = {
  2. "Get-process"
  3. "Hello"
  4. Read-Host "Wait for a key to be pressed"
  5. }
  6. Start-Process powershell -Verb runAs -ArgumentList $arguments
sqserrrh

sqserrrh6#

  1. pwsh -noe -c "echo 1"
n3schb8v

n3schb8v7#

还有一个选项可以添加列表。您可以在末尾添加“&& PAUSE”,以便在第一个命令成功时运行此命令。
例如,Start-Process cmd“/c “reg.exe query hkcu\printers\connections && pause””

相关问题