У меня есть скрипт Powershell для ослабления политики выполнения на компьютере, который по сути работает:
Set-ExecutionPolicy Unrestricted -Force
Поскольку ExecutionPolicy ограничен на машине, мне нужно запустить .ps1 сценарий, использующий файл .bat, который обходит политику выполнения следующим образом:
PowerShell.exe -ExecutionPolicy Bypass -File ./psscripts/myScript.ps1
Используя этот трюк, я получаю следующую ошибку:
Set-ExecutionPolicy : Windows PowerShell updated your execution policy successfully, but the setting is overridden by
a policy defined at a more specific scope. Due to the override, your shell will retain its current effective
execution policy of Bypass.
Ошибка пытается сказать мне, что область действия политики текущего процесса (запущенного с -Bypass) переопределяет тот, который я только что установил, но мне все равно все равно, поэтому я хотел бы просто скрыть эту ошибку.
Я пытался использовать - ErrorAction SilentlyContinue:
Set-ExecutionPolicy Unrestricted -Force -ErrorAction SilentlyContinue
Но ошибка по-прежнему отображается. Поэтому я попытался перенаправить поток ошибок в & NULL следующим образом:
Set-ExecutionPolicy Unrestricted -Force 2> $NULL
... но даже в этом случае ошибка все еще появляется на терминале.
Мне успешно удалось Приглушить ошибку с помощью try-catch, подобного этому:
try{Set-ExecutionPolicy Unrestricted -Force} catch {}
Однако я все же хотел бы понять, почему два других подхода не сработают? Пытаясь перенаправить поток ошибок (или любой поток) в переменную, переменная оказывается пустой, поэтому я предполагаю, что я каким-то образом пытаюсь перенаправить поток из неправильного процесса? Это как-то связано с запуском Powershell из файла .bat?
Кто-нибудь может мне помочь?