Откройте окно powershell из существующего окна powershell и оставьте его открытым после выполнения кода - PullRequest
2 голосов
/ 15 июня 2019

Я могу открыть окно powershell из существующего и предоставить ему код для запуска здесь

Но я не могу заставить второе окно оставаться открытым после выполнения кода

Вот что я хочу запустить в первом окне powershell, и мне бы хотелось, чтобы открытое окно powershell оставалось открытым после выполнения кода (в настоящее время оно закрывается сразу)

start powershell { ECHO "hi" }

Примечание

Я попробовал несколько предложений здесь но безуспешно

Кроме того, я получил исправление (в некотором роде), используя что-то вроде start powershell { ECHO "hi"; TIMEOUT 20 }, но это не будет держать окно постоянно открытым

Ответы [ 2 ]

4 голосов
/ 15 июня 2019
PowerShell -Command {Write-Host "Test" } -NoExit

от о Powershell . Для запуска Powershell в новом окне вы можете использовать:

start-process  powershell.exe -ArgumentList "-noExit", "-command","Write-host 'TEST'; Write-Host 'Test2'"

Важно -Command должен быть последним параметром ( о Powershell ):

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

2 голосов
/ 16 июня 2019

Обычно:

Если вы передаете команду (-Command) или файл сценария (-File) для выполнения вИнтерфейс командной строки PowerShell (powershell.exe в Windows PowerShell , pwsh.exe в PowerShell Core ), PowerShell по умолчанию выполняет команду / сценарий, а затем выходит .

С помощью команды или сценария, указанных для выполнения, вам нужно добавить переключатель -NoExit, если вы хотите, чтобы новый сеанс оставался открытым.

Предупреждение: (Если вы не вызываете непосредственно изнутри PowerShell с блоком сценария ), позиционным аргументом - т. Е. Ни один из которых не предшествует -Command или -File - неявно связан с:

  • -Command в Windows PowerShell
  • -File в PowerShell Core.

Поэтому рекомендуется использовать имя целевого параметра в явном виде.


С Start-Process (псевдоним start) :

start powershell { ECHO "hi" } работает в Windows PowerShell (но не работает)PowerShell Core), но важно отметить, что на самом деле вы не можете передавать блоки скриптов в Start-Process, только строк .

Start-Process принимает исполняемое имя (подразумевается -FilePath параметр) и массив из строка параметров (подразумевается -ArgumentList / -Args параметр).

Если вы передаете блок сценария ({ ... }), он автоматически строковый , что означает использование его буквального содержимого .

Таким образом, ваша команда - с -NoExit применяется по желанию - должно быть (с явно названными параметрами):

Start-Process -FilePath powershell -ArgumentList '-NoExit', '-Command', 'ECHO "hi"'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...