Главная > Power Shell > Как запустить скрипт PowerShell

Как запустить скрипт 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

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

Рубрики:Power Shell
  1. Yaroslav
    Январь 13, 2012 в 12:12

    Скажите пожалуйста, где будет храниться созданный сертификат?
    Как он появится на компьютере другого человека, которому я передам скрипт для выполнения?
    И еще вопрос — что за цифры в параметре -eku команды создания сертификата?

  2. Январь 13, 2012 в 13:11

    Добрый день Ярослав.
    1) сертификат и закрытый ключь этого сертификата находятся на ПК в специальном хранилише. Также в виде файлов🙂
    2) root.cer это какраз именно тот файл который надо передать пользователю, если это проходит не в домене (если в домене для это можно сделать другим способом).
    3) 1.3.6.1.5.5.7.3.3 это OID, который указывает на то что данный сертификат предназначет для подписывание исходного кода🙂

  3. Yaroslav
    Январь 13, 2012 в 14:09

    кажется, понятно, спасибо за ответы и оперативность. попробую.

  4. Аноним
    Март 14, 2013 в 08:05

    Добрый день, Евгений. Спасибо за статью, очень помогла!

  1. No trackbacks yet.

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

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s

%d такие блоггеры, как: