Гид по технологиям

Как остановить закрытие PowerShell после выполнения скрипта

3 min read PowerShell Обновлено 02 Dec 2025
PowerShell: окно не закрывается после скрипта
PowerShell: окно не закрывается после скрипта

Исправление: PowerShell закрывается после выполнения скрипта

Краткое описание PowerShell — одновременно оболочка и язык сценариев. При запуске .ps1-файла двойным щелчком Windows открывает процесс PowerShell, выполняет скрипт и сразу закрывает окно. Ниже — несколько простых и безопасных способов этого избежать, включая примеры кода и советы по выбору метода.

Важные термины

  • PowerShell: командная оболочка и язык сценариев.
  • -NoExit: параметр запуска, который не закрывает консоль после выполнения команд.
  • Enter-PSSession: команда для интерактивной удалённой сессии.

Способы остановить закрытие PowerShell

1. Запустите удалённую сессию интерактивно

Создайте файл с именем execute.ps1 на рабочем столе и вставьте в него этот код:

clear-Host

$br = "`n"; $br

Write-Output 'Step1: Press 1 for Powershell to reload'
Write-Output 'Step2: Press 2 to start remote session'
$br

Write-Host 'This script will' -NoNewline -ForegroundColor Green
Write-Host ' not ' -ForegroundColor Red -BackgroundColor Black -NoNewline
Write-Host 'indicate which step you are on,' -ForegroundColor Green
Write-Host 'if you are not sure, rather press 1 again and then 2.' -ForegroundColor Green
$br

$input = Read-Host 'Enter your choice'

switch($input) {

 1 { powershell.exe -NoExit "C:\\Users\\$env:username\\Desktop\\execute.ps1" -NoProfile }

 2 {
   Clear-Host
   Write-Warning 'You are about to connect to the remote server'
   # Замените RemoteServerName и domainname на ваши значения
   Enter-PSSession -ComputerName RemoteServerName -Credential "domainname\\$env:username"
 }

 default { Write-Warning 'An error has occurred' }

}

Инструкция:

  • Запустите execute.ps1.
  • При первом запуске нажмите 1 — скрипт перезапустится с ключом -NoExit, окно останется открытым.
  • Затем нажмите 2, чтобы начать удалённую сессию с нужным сервером.

Важно: при использовании Enter-PSSession убедитесь, что на целевом хосте включён PowerShell-Remoting и у вас есть соответствующие права.

2. Используйте команду Pause через cmd

Можно вызвать консольную паузу с помощью cmd:

cmd /c pause

Это отобразит сообщение “Press any key to continue”. Подойдёт при запуске из ярлыка или пакета .bat.

3. Добавьте Read-Host в конец скрипта

Простой и переносимый способ — запрос ввода у пользователя:

Read-Host -Prompt "Нажмите Enter для выхода"

Это работает и в PowerShell ISE, и в обычной консоли. Учтите, что команда ждёт нажатия Enter.

Пример запроса ввода в PowerShell

4. Запускайте скрипт через -NoExit из локальной оболочки

Создайте файл open.ps1 или ярлык, который вызывает:

powershell.exe -NoExit C:\\remote.ps1

remote.ps1 может содержать интерактивную команду, например:

Enter-PSSession -ComputerName YourExchangeServer -Credential (Get-Credential)

5. Используйте Start-Sleep для временной паузы

Если нужно просто задержать закрытие на определённое время:

Start-Sleep -s 15

Или укажите секунды явно: Start-Sleep -Seconds 60. Для прерывания нажмите Ctrl+C.

Как выбрать метод

  • Нужно ввести данные вручную или проверить вывод — используйте Read-Host.
  • Нужно отладить и оставить консоль открытой — запускайте с -NoExit.
  • Требуется краткая задержка — Start-Sleep.
  • Если сценарий запускается из .bat — cmd /c pause удобен.
  • Для удалённого администрирования используйте Enter-PSSession или Invoke-Command.

Шпаргалка команд

  • powershell.exe -NoExit path\\to\\script.ps1
  • Read-Host -Prompt "..."
  • Start-Sleep -Seconds 30
  • cmd /c pause
  • Enter-PSSession -ComputerName HOST -Credential (Get-Credential)

Рольные чек-листы

  • Системный администратор: использовать -NoExit при отладке; настроить PowerShell-Remoting; проверять права и политики исполнения.
  • Разработчик: добавлять Read-Host в dev-скрипты; избегать постоянных пауз в CI.
  • Скрипт-автор: документировать требование к интерактивности в начале скрипта.

Мини-методология быстрого теста

  1. Запустите скрипт двойным щелчком.
  2. Если окно закрывается — добавьте в конец Read-Host и протестируйте снова.
  3. Если нужен интерактивный режим — создайте ярлык с -NoExit.
  4. Для удалённой сессии — проверьте remoting и вход с Enter-PSSession.

Краткий глоссарий

  • NoExit: опция запуска PowerShell, не закрывающая окно.
  • Read-Host: cmdlet для запроса ввода у пользователя.
  • Start-Sleep: cmdlet для временной приостановки выполнения.

Критерии приёмки

  • Окно осталось открытым до явного ввода пользователя или завершения таймаута.
  • При запуске на сервере удалённая сессия установлена без ошибок.
  • Скрипт не блокирует CI/CD пайплайн бессрочно.

Заметки безопасности

  • Никогда не храните учётные данные в явном виде в скриптах.
  • Для автоматизации предпочтительнее использовать защищённые механизмы — Managed Service Accounts или ключи.

Спасибо за внимание. Оставьте комментарий, какой способ вам помог.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

RDP: полный гид по настройке и безопасности
Инфраструктура

RDP: полный гид по настройке и безопасности

Android как клавиатура и трекпад для Windows
Гайды

Android как клавиатура и трекпад для Windows

Советы и приёмы для работы с PDF
Документы

Советы и приёмы для работы с PDF

Calibration в Lightroom Classic: как и когда использовать
Фото

Calibration в Lightroom Classic: как и когда использовать

Отключить Siri Suggestions на iPhone
iOS

Отключить Siri Suggestions на iPhone

Рисование таблиц в Microsoft Word — руководство
Office

Рисование таблиц в Microsoft Word — руководство