Как запустить скрипт PowerShell

Как известно по умолчанию сне задана политика запускать скрипты 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

Для того чтобы скрипты не ругались о том что издатель не доверительный, внесите его руками или с помощью груповых политик в список доверительный издателей.

Pin It

4 thoughts on “Как запустить скрипт PowerShell

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.