Скрипт для изменения 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.

Другие вопросы по тегам