Скрипт для изменения PowerShell ExecutionPolicy
Когда я настраиваю свою систему, я использую несколько скриптов конфигурации, чтобы иметь удобное место для игры.
Исходя из этого, я запускаю, дважды щелкнув по следующему enableps.js
:
new ActiveXObject("Shell.Application").ShellExecute(
"powershell", "-noexit -Command \"& Set-ExecutionPolicy RemoteSigned\"", "", "runas");
Из-за -noexit
Я могу выдать в отображаемом окне PowerShell:
Get-ExecutionPolicy
и получите, как и ожидалось:
RemoteSigned
К сожалению, при открытии нового экземпляра PowerShell политика остается Restricted
,
Если я бегу в стандарте cmd
незамедлительный:
cscript "path\to\enableps.js"
оно работает. Но если я вставлю команду в enableps.cmd
Пакет и снова попробуйте запустить его, дважды щелкнув, это не работает. Если я щелкните правой кнопкой мыши enableps.cmd
и используйте запись Runas-Administrator, она снова работает.
Итак, как я могу заставить все работать со стандартным двойным щелчком (плюс соответствующее приглашение Windows)?
3 ответа
Вам нужно запустить команду и дать ей -Scope
аргумент, так что он применяется более чем к текущему сеансу. Добавьте аргумент:
-Scope CurrentUser
... и решение:
Дважды щелкните файл:
// enableps.js
// -----------
new ActiveXObject("Shell.Application").ShellExecute(
"powershell", "-Command \"Set-ExecutionPolicy RemoteSigned\" -Scope CurrentUser",
"", "runas");
Рассмотреть вопрос о замене RemoteSigned
с Unrestricted
разрешить запуск загруженных скриптов тоже.
Кредит идет на TheMadTechnician, который так или иначе не написал полный код.
По умолчанию внесение общесистемных изменений потребует повышения уровня процесса, если он еще не был повышен. Если вы хотите, чтобы ваш сценарий отключил политику выполнения на уровне компьютера, вам нужно будет либо отключить UAC, либо запустить cscript с помощью shellExecute, который предоставит пользователю необходимый диалог подтверждения UAC.