пакетный файл приостанавливается после выполнения команды powershell - PullRequest
1 голос
/ 09 января 2020

Я пытаюсь установить -ExecutionPolicy (разрешить сценарии) для фактического процесса (cmd.exe)

Если записать эту команду в cmd.exe (от имени администратора):

PowerShell.exe -ExecutionPolicy Unrestricted

Вывод:

Windows PowerShell 
Copyright (C) Microsoft Corporation. Alle Rechte vorbehalten.

Lernen Sie das neue plattformübergreifende PowerShell kennen – https://aka.ms/pscore6

Чем я поставил эту команду:

PowerShell.exe -Command "SomePowerShellScript.ps"

И все работает.

Если я попробую то же самое из пакетный файл, он останавливается после первой команды.

Причина, по которой я использую первую команду, а не спецификацию Powershell c с Set-ExecutionPolicy, описана Microsoft:

https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_execution_policies?view=powershell-5.1

PowerShell.exe -ExecutionPolicy Unrestricted

-> устанавливает ExecutionPolicy на cmd и powershell (скрипт может быть запущен)

PowerShell.exe -Command Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope Process

-> устанавливает политику только для фактического powershell Процесс .exe (запуск сценария запрещен)

И для пояснения я не хочу устанавливать политику выполнения Unrestricted для LocalMachine / CurrentUser, если это возможно.

Для объяснения этой проблемы batch-file предназначен только для "ленивых" людей, чтобы напрямую запускать скрипт Powershell-Script без необходимости set ExecutionPolicy (чтобы он работал двойным щелчком).

У кого-нибудь есть идея, почему пакетный файл останавливается после первой команды (я тоже пробовал с помощью powershell.exe)?

Спасибо для ответа:).

1 Ответ

3 голосов
/ 09 января 2020

Кажущаяся пауза является результатом PowerShell.exe -ExecutionPolicy Unrestricted фактического входа в интерактивный сеанс PowerShell, который необходимо вручную exit (кроме этого, политика выполнения устанавливается только для этого сеанса (процесса) ).

Если вы поместите -ExecutionPolicy Unrestricted (или -ExecutionPolicy Bypass) перед аргументом -File, политика выполнения устанавливается - только для процесса - перед выполнением файла сценария, переданного в -File, попытка, и выполнение должно завершиться успешно (если только групповая политика не переопределяет переопределенную политику выполнения в командной строке:

powershell.exe -ExecutionPolicy Unrestricted -File SomePowerShellScript.ps1

Вы также можете использовать -Command, но учтите, что это меняет интерпретацию аргументов ; в частности, вы должны затем использовать .\SomePowerShellScript.ps1 для ссылки на скрипт для выполнения.

См. этот ответ для получения дополнительной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...