7

Я работаю над своими точечными файлами и хочу создать пакетный скрипт, который будет выполнять некоторые начальные настройки для меня при переходе на новый компьютер, например, использование psget для установки модулей и т.д. Я также хотел бы, чтобы он пошел дальше и изменил свой ExecutionPolicy на что-то пригодное для использования.

Я создал командный файл, который просто запускает скрипт powershell в Bypass ExecutionPolicy:

powershell -ExecutionPolicy ByPass 
           -NoLogo -NoProfile -NoExit 
           -File .\set-policy.ps1

set-policy.ps1 пытается запустить powershell от имени администратора для изменения ExecutionPolicy:

Start-Process powershell -verb runas 
  -ArgumentList "-No Exit -Command { Set-ExecutionPolicy Restricted }"

К сожалению, это не похоже на этот трюк (вывод ниже). Не уверен, в чем проблема.

Set-ExecutionPolicy Restricted
PS C:\windows\system32> Get-ExecutionPolicy
RemoteSigned

Любые советы о том, как использовать пакетный файл + сценарий powershell для изменения политики выполнения?

2 ответа2

11

Проблема в том, как вы вызываете новый процесс PowerShell; кажется, что он выполняет команды до того, как приглашение PowerShell готово к нему, поэтому они просто выводятся на консоль; Я не уверен, почему, хотя. В любом случае, вот исправление.

Вот как должен выглядеть ваш файл set-policy.ps1:

Start-Process PowerShell -ArgumentList "Set-ExecutionPolicy Restricted -Force" -Verb RunAs

Или вы можете сделать все это из командного файла в одну строку следующим образом:

PowerShell -NoProfile -ExecutionPolicy Bypass -Command "& {Start-Process PowerShell -ArgumentList 'Set-ExecutionPolicy Restricted -Force' -Verb RunAs}"

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

3

Самый простой способ сделать это - отредактировать реестр. Так что теперь мой командный файл просто содержит:

regedit.exe /S EnableScripts.reg

Запуск, который автоматически запросит у пользователя разрешения / учетные данные при необходимости. Мой файл EnableScripts.reg просто содержит следующее:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell]
"Path"="C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe"
"ExecutionPolicy"="RemoteSigned"

Приведенного выше параметра реестра было достаточно, за исключением случая запуска PowerShell x86 (на моем 64-разрядном компьютере). Для этого необходимо дополнительно установить ключи реестра ниже:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell]
"Path"="C:\\Windows\\SysWOW64\\WindowsPowerShell\\v1.0\\powershell.exe"
"ExecutionPolicy"="RemoteSigned"

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .