2012-02-11 72 views
11

当我在PowerShell上运行程序时,它会打开一个新窗口,在我看到输出之前,窗口关闭。我如何做到这一点,PowerShell保持这个窗口打开?如何让PowerShell保持命令窗口打开?

+0

这个程序是一个exe文件还是一个批处理文件?你能给出你正在运行的确切命令,可能会更改可执行文件的名称吗? – 2012-02-11 21:46:13

+0

这是一个exe文件。我将程序所在的文件夹添加到我的路径中,当我输入它运行的程序的名称时,除了它打开的窗口关闭太快,我无法阅读它说的内容。该程序是一个测试python程序的程序。至于下面的评论,我不知道如何在批处理文件中打包程序:/ – Erman 2012-02-11 21:56:15

+0

我更新了我的答案,以澄清如何做到这一点。将程序输出重定向到文本文件也是有意义的。 – 2012-02-11 22:59:52

回答

1

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

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

8

尝试做:

start-process your.exe -NoNewWindow 

添加太多,如果需要-Wait

+0

当我这样做时它告诉我“Start-Process:This由于错误,无法执行命令:系统找不到指定的文件。“ 这是奇怪的,因为我将EXE的位置添加到我的路径。 – Erman 2012-02-11 22:04:49

+0

@Erman - 确保它确实如此。如果需要,重新启动Powershell。或者使用完整路径查看正在发生的事情。 – manojlds 2012-02-11 22:07:24

+0

@Erman我想你想把powershell.exe my.bat -NoNewWindow – 2012-05-15 13:59:22

3

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

您还可以轻松将输出重定向或实现某种的超时情况下,你的应用程序可以冻结...

+0

完美。正是我在找什么。万分感谢。 – Saulius 2012-07-05 13:51:42

4

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

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

PowerShell纯粹主义者的另一种选择是使用powershell代替cmd:Start-Process powershell“your。可执行程序 ; read-host'按回车继续'“ – Cary 2013-03-25 18:50:24

+1

我使用这个:'Start-Process”powershell“-wait -ArgumentList”tree'D:';暂停“'。 – larkee 2015-07-29 15:39:11

相关问题