Как подавить предупреждение из скрипта при вызове Set-ExecutionPolicy - PullRequest
2 голосов
/ 05 марта 2020

Я пишу скрипт для подготовки наших ноутбуков перед использованием. По сути, он устанавливает сертификаты и устанавливает для политики выполнения значение AllSigned.

Он запускается по щелчку правой кнопкой мыши и «Запуск с Powershell». Это стандартный windows 10 обход алгоритма исполнения, позволяющий запускать скрипт на неизмененных windows 10 машинах (по крайней мере, мне так кажется). Таким образом, я могу выполнить свой сценарий без необходимости явного изменения политики выполнения.
После запуска сценария машина настроена. Я просто получаю предупреждение, которое хочу подавить.

Для этого внутри сценария я повышаю уровень сценария до прав администратора с помощью параметра обхода. Это прекрасно работает, за исключением того, что Я получаю предупреждение при настройке политики выполнения AllSigned . Это говорит о том, что у меня есть политика, определенная в более конкретной области c.

Примечание. Команда сработала, и политика выполнения установлена. Он просто всплывает красным и выглядит как ошибка. Если кто-то выполняет сценарий, я не хочу, чтобы у меня возникали вопросы.

- Мой вопрос: -
Поскольку я знаю, что такое поведение предназначено, я не не хочу, чтобы предупреждение появилось. Как я могу подавить сообщение?

Я пробовал различные настройки с переключателями «WarningAction» и «ErrorAction», но он не работает.

Некоторые подробности:
ErrorMessage:

Set -ExecutionPolicy: Windows PowerShell успешно обновил политику выполнения, но параметр переопределяется политикой, определенной в более определенной области c. Из-за переопределения ваша оболочка сохранит свою текущую эффективную политику выполнения Bypass. Введите «Get-ExecutionPolicy -List», чтобы просмотреть параметры политики выполнения. Для получения дополнительной информации см. «Get-Help Set-ExecutionPolicy». В C: \ Users \ uwe \ Desktop \ InstallRootCA \ InstallRootCertificate.ps1: 46 char: 5 + Set-ExecutionPolicy AllSigned -Scope LocalMachine -Force + ~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ CategoryInfo: PermissionDenied: (:) [Set- ExecutionPolicy], SecurityException + FullyQualifiedErrorId: ExecutionPolicyOverride, Microsoft.PowerShell.Commands.SetExecutionPolicyCommand

Соответствующие части кода из сценария powershell:

Повышение уровня сценария до выполнения: 1029 * *

Установка политики выполнения в конце скрипта:

Set-ExecutionPolicy AllSigned -Scope LocalMachine

Я перепробовал все виды флагов

-Force
-WarningAction Ignore|SilentlyContinue
-ErrorAction same

Но все равно появляется красное предупреждение.

Ответы [ 2 ]

3 голосов
/ 05 марта 2020

Вы можете поместить эту команду в оператор try catch. Оператор catch будет обрабатывать ошибки, и если он будет пустым, ничего не произойдет, если Set-ExecutionPolicy выдаст ошибку.

try{
    Set-ExecutionPolicy AllSigned -Scope LocalMachine
}
catch {
    #Do Nothing
}

Пожалуйста, проверьте его, дайте мне знать, сработало ли это, и если это так, отметьте пост как ответ:)

2 голосов
/ 05 марта 2020

Ответ Nicicalu эффективен; позвольте мне добавить некоторую справочную информацию:

То, что Set-ExecutionPolicy выдает в вашем случае, является (оператор -) завершающей ошибкой , поэтому это ни на -ErrorAction, ни на -WarningAction.

Завершение ошибок не может быть обработано только через :

  • try / catch, как показано в ответе Nicicalu.

  • - редко используется - trap оператор

  • сбивает с толку, установка предпочтительная переменная $ErrorActionPreference до 'SilentlyContinue'.

    • Это сбивает с толку, потому что кажущийся эквивалентным -ErrorAction общий параметр делает не работу ; то есть -ErrorAction SilentlyContinue или -ErrorAction Ignore имеют никакого эффекта, потому что -ErrorAction является , предназначенным для работы только с нескончаемыми ошибками.

Подробный обзор обработки сложных ошибок PowerShell см. В этой проблеме с документами GitHub .


Принимая шаг назад: Для Set-ExecutionPolicy не имеет смысла сообщать об ошибке в этом сценарии , учитывая, что команда все же успешно выполнила в принципе.

Было бы более уместно выдать предупреждение , как предложено в этом выпуске GitHub .

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