Как известно по умолчанию сне задана политика запускать скрипты Power Shell. и это не позволяет запускать скрипты. Существует несколько типов политик, и областей политик.
Типы политик
Политика | Описание |
Restricted | — Допускает отдельные команды, но скрипты выполнять нельзя. — Препятствует выполнению всех файлов скриптов, включая файлы форматирования и конфигурации (PS1XML), файлы скриптов модулей (PSM1) и профили Windows PowerShell (PS1). |
AllSigned | — Выполнение скриптов разрешено. — Требует, чтобы все скрипты и файлы конфигурации были подписаны надежным издателем, в том числе скрипты, подготовленные на локальном компьютере. — Перед выполнением скриптов издателей, для которых еще не определено, являются ли они надежными, выводятся предупреждения. — Имеется риск выполнения неподписанных скриптов из источников, отличных от Интернета, а также подписанных, но вредоносных скриптов. |
RemoteSigned | — Выполнение скриптов разрешено. — Требует наличия цифровой подписи надежного издателя у скриптов и файлов конфигурации, загружаемых из Интернета (включая электронную почту и программы мгновенного обмена сообщениями). — Не требует наличия цифровых подписей у скриптов, выполняемых и написанных на локальном компьютере (не загруженных из Интернета). — Имеется риск выполнения подписанных, но вредоносных скриптов. |
Unrestricted | — Могут выполняться неподписанные скрипты. (Имеется риск выполнения вредоносных скриптов.) — Предупреждает пользователя перед выполнением скриптов и файлов конфигурации, загруженных из Интернета. |
Bypass | — Ничего не блокируется, и никакие предупреждения и запросы не появляются. — Эта политика выполнения предназначена для конфигураций, в которых скрипт Windows PowerShell встроен в более крупное приложение, или для конфигураций, в которых Windows PowerShell является платформой для программы, у которой имеется собственная модель обеспечения безопасности. |
Undefined | — В текущей области не задана политика выполнения. — Если политика выполнения во всех областях имеет значение Undefined, действует политика выполнения Restricted, которая является политикой выполнения по умолчанию. |
Области политик
Области политик | Описание |
Process | Действие политики выполнения распространяется только на текущий сеанс (текущий процесс Windows PowerShell). Политика выполнения хранится в переменной среды $PSExecutionPolicyPreference. Это значение удаляется, когда сеанс, в котором задана политика, закрывается. |
CurrentUser | Действие политики выполнения распространяется только на текущего пользователя. Она хранится в разделе реестра HKEY_CURRENT_USER. |
LocalMachine | Действие политики выполнения распространяется на всех пользователей текущего компьютера. Она хранится в разделе реестра HKEY_LOCAL_MACHINE. |
Тип политики выбирать вам, лично я советую AllSigned. Включить политику можно 2 двумя способами
1) Командой PowerShell — Set-ExecutionPolicy <имя_политики>
2) Правило в Груповой Политке. Найти её можно тут Computer Configuration->Policies->Administrative templates->Windows Components
Создание Сертификата и подпись скрипта.
Для создания собственного сертификата подписи нужно использовать инструмент для создания сертификатов (MakeCert.exe). Этотинструмент входит в состав комплектов Microsoft .NET Framework SDK версии 1.1 и Microsoft Windows SDK.
makecert -n «CN=PowerShell Local Certificate Root» -a sha1 -eku 1.3.6.1.5.5.7.3.3 -r -sv root.pvk root.cer -ss Root -sr localMachine
makecert -pe -n «CN=PowerShell User» -ss MY -a sha1 -eku 1.3.6.1.5.5.7.3.3 -iv root.pvk -ic root.cer
Дальше необходимо проверить установился ли сертификат. Для этого выполним команду в PowerShell
get-childitem cert:CurrentUsermy -codesigning
Или создать с помощью центра сертификатов.
Чтобы подписать скрипт в PowerShell необходимо выполнить.
$cert = @(Get-ChildItem cert:CurrentUserMy -codesigning)[0]
Set-AuthenticodeSignature add-signature.ps1 $cert
Обращу внимание на проблему, которая встречаеться. Когда выполняете подпись скрипта, получаете UnknownError. Обычно это проблема в том что кодировка файла не подходит, чтобы подписать его. Решение простое, создайте скрипт в блокноте его, и подпишыте. Для описания статуса выполняем
(Set-AuthenticodeSignature <filename> $cert).statusmessage
Для того чтобы скрипты не ругались о том что издатель не доверительный, внесите его руками или с помощью груповых политик в список доверительный издателей.
4 thoughts on “Как запустить скрипт PowerShell”