Как заставить PowerShell держать окно командной строки открытым? - PullRequest
14 голосов
/ 12 февраля 2012

Когда я запускаю программу в PowerShell, она открывает новое окно, и, прежде чем я вижу результат, окно закрывается.Как мне сделать так, чтобы PowerShell оставил это окно открытым?

Ответы [ 4 ]

9 голосов
/ 12 февраля 2012

Попробуйте сделать:

start-process your.exe -NoNewWindow

При необходимости добавьте -Wait.

5 голосов
/ 25 марта 2013

ОП выглядел удовлетворенным ответом, но он не оставляет новое окно открытым после выполнения программы, о чем он, казалось, спрашивал (и ответ, который я искал).Итак, после еще одного исследования я придумал:

Start-Process cmd "/c `"your.exe & pause `""
3 голосов
/ 12 февраля 2012

Я решал подобную проблему несколько недель назад.Если вы не хотите использовать & (& '.\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"

Вы также можете легко перенаправить вывод или реализовать какое-то время ожидания в случае, если ваше приложение может зависнуть...

2 голосов
/ 12 февраля 2012

Если программа представляет собой пакетный файл (расширение .cmd или .bat), запускаемый с помощью команды cmd /c foo.cmd, просто измените его на cmd /k foo.cmd, и программа будет выполнена, но приглашение останется открытым.

Если программа не является командным файлом, оберните его в командный файл и добавьте команду pause в конце. Чтобы обернуть программу в командный файл, просто поместите команду в текстовый файл и дайте ей расширение .cmd. Затем выполните это вместо exe.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...