Остановить выход Powershell - PullRequest
       25

Остановить выход Powershell

17 голосов
/ 20 февраля 2012

Я знаю, что есть небольшой переключатель -noexit для PowerShell.

Есть ли какой-либо способ остаться в оболочке без использования этого переключателя?

Другими словами, я хочу сценарийкоманда (ы), которая выполняется, затем оставляет оболочку открытой.

Ответы [ 8 ]

17 голосов
/ 08 июля 2014

У вас есть 3 варианта запрета закрытия окна консоли PowerShell, которые я описываю более подробно в своем блоге .

  1. Одноразовое исправление: Запустите сценарий из консоли PowerShell или запустите процесс PowerShell с помощью ключа -NoExit. например PowerShell -NoExit "C:\SomeFolder\SomeScript.ps1"
  2. Исправление по сценарию: Добавьте подсказку для ввода в конец файла сценария. например Read-Host -Prompt "Press Enter to exit"
  3. Глобальное исправление: Измените раздел реестра, чтобы всегда оставлять окно консоли PowerShell открытым после завершения работы сценария.

См. Мой блог для получения дополнительной информации о том, какие разделы реестра нужно изменить.

Похоже, вы ищете вариант № 1 или № 3.

14 голосов
/ 20 февраля 2012

Этот скрипт не завершится, если вы запустите его без аргументов, например дважды щелкнув по нему:

param($Work)

# restart PowerShell with -noexit, the same script, and 1
if (!$Work) {
    powershell -noexit -file $MyInvocation.MyCommand.Path 1
    return
}

# now the script does something
# this script just outputs this:
'I am not exiting'
10 голосов
/ 20 февраля 2012

Вы пробовали

$host.enternestedprompt()

Это остановит выполнение и отбросит их во вложенное приглашение. Когда они выходят из этого приглашения, сценарий завершается и окно закрывается.

3 голосов
/ 19 февраля 2014

Цикл while в конце этого тривиального сценария запрашивает у меня команду и выполняет ее.Он работает со средой скрипта, поэтому можно проверить значения переменных.Ввод «выхода» завершает цикл при его выполнении.

# Do something.

cd D:\temp
$current_directory = $(pwd)
dir

write-host  # Just add a little space after the dir

# Stay in the shell and execute commands.

while ($TRUE) {
  $cmd = Read-Host "PS $(pwd)"
  if ($cmd[0] -eq '"') { iex "& $cmd" } 
    else { iex $cmd }
}

Я уверен, что другие смогут поделиться некоторыми уточнениями, но это только начало.Привет.

3 голосов
/ 30 ноября 2013
"do stuff"
Pause

Да, как и в командной строке - вывод:

do stuff
Press Enter to continue...:
2 голосов
/ 20 февраля 2012

Мне неизвестна команда, которую вы могли бы запустить в сценарии, которая не позволяла бы завершить работу оболочки, если она не была вызвана с помощью команды -noexit.

Я обычно использую Read-Host "Press ENTER to continue" в конце, если не хочу, чтобы оболочка закрывалась.Однако это не помешает закрытию оболочки после нажатия клавиши ввода, если она не была запущена с -noexit.

1 голос
/ 20 февраля 2012

Как это?

PowerShell -File  c:\myscript.ps1 -NoExit
0 голосов
/ 26 апреля 2018

Не восстанавливать шестилетнюю ветку или что-то в этом роде, но всем, кто читает, следует отметить, что вы можете завершить свой скрипт с помощью

Stop-Process -processname regedit

, если у вас есть настройка реестра (глобальное исправление)включен и фактически хочет запустить автоматически закрывающийся скрипт.

...