Запуск PowerShell скрипта

Запуск PowerShell скрипта

PowerShell logo

Данная заметка посвящена описанию настройки необходимых параметров для запуска PowerShell скриптов. Чаще при первом запуске .ps1 скриптов вы видите следующие ошибки:

Файл <file-name> невозможно загрузить. Файл <file-name> не имеет цифровой подписи. Скрипт не будет выполнен в системе. Чтобы получить дополнительные сведения, введите команду “Get-Help about_signing”.
The file <file-name> cannot be loaded. The file <file-name> is not digitally signed. The script will not execute on the system. Please see “Get-Help about_Signing” for more details.

или


Запустить программу от ненадежного издателя? Файл <file-name> опубликован CN=<publisher-name>. Этот издатель не помечен как надежный в данной системе. Выполнять следует только скрипты надежных издателей.
[V] Никогда не выполнять [D] Не выполнять [R] Выполнить один раз [A] Всегда выполнять [?] Справка (по умолчанию “D”):
Do you want to run software from this untrusted publisher? The file <file-name> is published by CN=<publisher-name>. This publisher is not trusted on your system. Only run scripts from trusted publishers.
[V] Never run  [D] Do not run  [R] Run once  [A] Always run [?] Help (default is “D”):

Данные ошибки и сообщения вызваны настройками политики выполнения Windows PowerShell. При этом не стоит думать, что эти параметры действительно повышают безопасность ОС, ведь код все равно отработает, если его скопировать в к консоль PowerShell. Таким образом, настройки безопасности можно отключить – они защищают только от случайных действий. Поэтому обычно данную проблему решают командой:

Применить данную команду рекомендуется в консоли PowerShell запущенной от имени администратора. Данная команда разрешит выполнять, на данном компьютере, не подписанные скрипты и скрипты из Интернета.

Конечно, такой подход не применим в корпоративной среде, поэтом разберемся более подробно с данной ситуацией. Посмотреть текущие настройки политики во всех областях применения можно выполнив командлет Get-Executionpolicy с параметром list.

Результат выполнения командлета:

Scope ExecutionPolicy
—– —————
MachinePolicy Unrestricted
UserPolicy Undefined
Process RemoteSigned
CurrentUser AllSigned
LocalMachine Restricted

 Данная политика может принимать 6 значений:

Restricted (Политика выполняется по умолчанию. Например если во всех областях применения стоит значение Undefined)
– Допускает отдельные команды, но скрипты выполнять нельзя.
– Препятствует выполнению всех файлов скриптов, включая файлы форматирования и конфигурации (PS1XML), файлы скриптов модулей (PSM1) и профили Windows PowerShell (PS1).

AllSigned
– Выполнение скриптов разрешено.
– Требует, чтобы все скрипты и файлы конфигурации были подписаны надежным издателем, в том числе скрипты, подготовленные на локальном компьютере.
– Перед выполнением скриптов издателей, для которых еще не определено, являются ли они надежными, выводятся предупреждения.
– Имеется риск выполнения неподписанных скриптов из источников, отличных от Интернета, а также подписанных, но вредоносных скриптов.

RemoteSigned
– Выполнение скриптов разрешено.
– Требует наличия цифровой подписи надежного издателя у скриптов и файлов конфигурации, загружаемых из Интернета (включая электронную почту и программы мгновенного обмена сообщениями).
– Не требует наличия цифровых подписей у скриптов, выполняемых и написанных на локальном компьютере (не загруженных из Интернета).
– Имеется риск выполнения подписанных, но вредоносных скриптов.

Unrestricted
– Могут выполняться неподписанные скрипты. (Имеется риск выполнения вредоносных скриптов.)
– Предупреждает пользователя перед выполнением скриптов и файлов конфигурации, загруженных из Интернета.

Bypass
– Ничего не блокируется, и никакие предупреждения и запросы не появляются.
– Эта политика выполнения предназначена для конфигураций, в которых скрипт Windows PowerShell встроен в более крупное приложение, или для конфигураций, в которых Windows PowerShell является платформой для программы, у которой имеется собственная модель обеспечения безопасности.

Undefined
– В текущей области не задана политика выполнения.
– Если политика выполнения во всех областях имеет значение Undefined, действует политика выполнения Restricted, которая является политикой выполнения по умолчанию.

Существует пять областей применения данной политики и параметров:

MachinePolicy и UserPolicy задаются политиками AD или локальными политиками данного компьютера.
Process – область применения текущая ссесия. В справке говорится, что её значение хранится в переменной $PSExecutionPolicyPreference однако получить/изменить значение данной политики через переменную не удалось. Измения сделанные на эту область применения ни как не повлияют на другие сессии.
CurrentUser – область применения текущей пользователь. Её значение хранится в разделе реестра HKEY_CURRENT_USER (“HKEY_CURRENT_USER\Software\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell\ExecutionPolicy”).
LocalMachine – область применения на всех пользователей текущего компьютера. Она хранится в разделе реестра HKEY_LOCAL_MACHINE(“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\ScriptedDiagnostics\ExecutionPolicy”).

У команды get-executionpolicy есть параметр -Scope. С помощью данного параметра можно выбрать область применения для которого отобразиться значение политики.

Get-ExecutionPolicy -scope Process

Результат выполнения командлета: RemoteSigned

При этом Области применения имеют приоритет высшим обладает MachinePolicy, потом UserPolicy, Process, CurrentUser и самый низкий приоритет у LocalMachine.
Поэтому в примере:

Scope ExecutionPolicy
—– —————
MachinePolicy Unrestricted
UserPolicy Undefined
Process RemoteSigned
CurrentUser AllSigned
LocalMachine Restricted

В текущей ссесии результирующая политика будет иметь значение Unrestricted.

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

Что бы изменять значение политик выполнения скриптов PowerShell, существует коммандлет  Set-ExecutionPolicy.
Данный командлет имеет следующие параметры:

-ExecutionPolicy
Указывает значение политики. Может иметь следующие значения:  Restricted, AllSigned, RemoteSigned, Unrestricted, Bypass, Undefined. Данный параметр обязательный для указания. Если не указан, во время выполнения комадлет попросит указать значения.

Вывод:
Укажите значения для следующих параметров:
ExecutionPolicy:

-Scope
Определяет область применения данной политики. Может иметь следующие значения: LocalMachine ,Process, CurrentUser. Если параметр области применения не указан, по умолчанию указывается значение LocalMachine.

или

-Force
С этим параметром командлет не будет требовать подтверждения со стороны пользователя. Например:

Командлет ничего не выведет на экран и применит значение политики.

-Confirm
Если же вам наоборот мало одного подтверждения. Можно указать параметр Confirm и у вас будет ещё один, дополнительный, запрос на подтверждение ваших действий:

Результат выполнения:

Подтверждение
Вы действительно хотите выполнить это действие?
Выполнение операции “Set-ExecutionPolicy” над целевым объектом “Unrestricted”.
[Y] Да – Y  [A] Да для всех – A  [N] Нет – N  [L] Нет для всех – L  [S] Приостановить – S  [?] Справка (значением по умолчанию является “Y”):

Изменение политики выполнения
Политика выполнения защищает компьютер от ненадежных сценариев. Изменение политики выполнения может поставить под угрозу безопасность системы, как описано в разделе справки, вызываемом командой about_Execution_Policies. Вы хотите изменить политику выполнения?
[Y] Да – Y  [N] Нет – N  [S] Приостановить – S  [?] Справка (значением по умолчанию является “Y”):

-WhatIf
С параметром WhatIf командлет не выполняется. А выводит на консоль свои предполагаемые действия без данного параметра.

 WhatIf: Выполнение операции “Set-ExecutionPolicy” над целевым объектом “Unrestricted”.

Изменение параметров политики, при запуске консоли.

Так же можно задать значение области применения Process при запуске консоли PowerShell c помощью параметра executionpolicy. Пример:

Результат выполнения:

Scope ExecutionPolicy
—– —————
MachinePolicy Unrestricted
UserPolicy Undefined
Process RemoteSigned
CurrentUser AllSigned
LocalMachine Restricted

Изменение параметров политики запуска скриптов, с помощью групповых политик.

В груповой политике, параметр контролирующая запуск скриптов находиться по пути:

для MachinePolicy:

Computer Configuration/Policies/Administrative Templates/Windows Components/Windows PowerShell

или

Конфигурация компьютера/Административные шаблоны/Компоненты Windows/Windows PowerShell

для UserPolicy:
User Configuration/Policies/Administrative Templates/Windows Components/Windows PowerShell

или

Конфигурация пользователя/Административные шаблоны/Компоненты Windows/Windows PowerShell

Параметр Execution Policy может принимать 3 значения:

ЗНАЧЕНИЕ ПАРАМЕТРА EXECUTION POLICY В ГРУППОВОЙ ПОЛИТИКИ ЗНАЧЕНИЕ ПАРАМЕТРА ОТОБРАЖАЮЩЕЕСЯ В GET-EXECUTIONPOLICY
Разрешить все скрипты.
(Allow all scripts)
Unrestricted
Разрешить локальные скрипты и удаленные подписанные скрипты.
(Allow local scripts and remote signed scripts)
RemoteSigned
Разрешить только подписанные скрипты.
(Allow all scripts)
AllSigned
blank

Занимаюсь IT с 2007 года. Всё началось с увлечения — разгона компьютерного оборудования. Много воды и азота утекло с тех пор... Сейчас уже более 3х лет со своей командой оказываю комплексную поддержку и продвижение бизнеса: SEO, Яндекс.Директ, рассылки и удалённое обслуживание серверов. Буду рад помочь, обращайтесь!

Оцените автора
IT для специалистов и бизнеса
Добавить комментарий