Когда я запускаю программу на PowerShell, она открывает новое окно и, прежде чем я смогу увидеть результат, окно закрывается. Как сделать так, чтобы PowerShell открывал это окно?
Как заставить PowerShell открыть окно команд?
Ответ 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.