Подтвердить что ты не робот

Как заставить PowerShell открыть окно команд?

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

4b9b3361

Ответ 1

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

start-process your.exe -NoNewWindow

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

Ответ 2

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

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

Ответ 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"

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

Ответ 4

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

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