Что такое сценарии JavaScript и как включить их поддержку в браузере? Файл - политика выполнения скриптов powershell Как разрешить выполнение неподписанного скрипта PowerShell

💖 Нравится? Поделись с друзьями ссылкой

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

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

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

Запустить программу от ненадежного издателя? Файл опубликован CN=Этот издатель не помечен как надежный в данной системе. Выполнять следует только скрипты надежных издателей.
[V] Никогда не выполнять [D] Не выполнять [R] Выполнить один раз [A] Всегда выполнять [?] Справка (по умолчанию «D»):
Do you want to run software from this untrusted publisher? The file is published by CN=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. Таким образом, настройки безопасности можно отключить — они защищают только от случайных действий. Поэтому обычно данную проблему решают командой :

Set-ExecutionPolicy Unrestricted LocalMachine

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

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 без параметров.

Вывод: Unrestricted

Изменение политики выполнения скриптов PowerShell:

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

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

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

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

Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope Process

Set-ExecutionPolicy Unrestricted Process

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

Set-ExecutionPolicy Unrestricted Process -Force

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

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

Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope Process -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»): . exe -executionpolicy Unrestricted

Get-ExecutionPolicy -list

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

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 значения.



PowerShell говорит, что «выполнение скриптов отключено в этой системе». (15)

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

Management_Install.ps1 не может быть загружен, потому что выполнение скриптов отключено в этой системе.

Я выполнил set-executionpolicy unrestricted и когда я запускаю get-executionpolicy из PowerShell, я получаю unrestricted ответ.

// Выход из Powershell

PS C: \ Users \ Administrator> get-executionpolicy

неограниченный

// Выход из DOS

C: \ Projects \ Microsoft.Practices.ESB \ Source \ Samples \ Management Portal \ Install \ Scr

ips> powershell. \ Management_Install.ps1 1

ПРЕДУПРЕЖДЕНИЕ: Запуск x86 PowerShell ...

Файл C: \ Projects \ Microsoft.Practices.ESB \ Source \ Samples \ Management Portal \ Install \ Scripts \ Management_Install.ps1 не может быть загружен, так как выполнение скриптов отключено в этой системе. Подробнее см. «Get-help about_signing».

На строке: 1 символ: 25

    . \ Management_Install.ps1 <<<< 1

    • CategoryInfo: NotSpecified: (:) , PSSecurityException

      FullyQualifiedErrorId: RuntimeException

C: \ Projects \ Microsoft.Practices.ESB \ Source \ Samples \ Management Portal \ Install \ Scripts> пауза

Нажмите любую клавишу для продолжения. ,

Системой является Windows Server 2008 R2.

Что я делаю неправильно?

  1. Откройте PowerShell в качестве администратора и запустите
  2. Предоставьте RemoteSigned и нажмите Enter.
  3. Запустить Set-ExecutionPolicy -Scope CurrentUser
  4. Предоставьте неограниченное количество и нажмите Enter.

RemoteSigned: все созданные вами скрипты будут запущены, и все сценарии, загруженные из Интернета, должны быть подписаны доверенным издателем.

ОК, измените политику, просто набрав:

Set-ExecutionPolicy RemoteSigned

В PowerShell 2.0 политика выполнения была отключена по умолчанию.

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

В вашем случае введите Set-ExecutionPolicy RemoteSigned из консоли PowerShell и скажите «да».

Перейдите в меню «Пуск» и найдите «Windows PowerShell ISE».

Щелкните правой кнопкой мыши по версии x86 и выберите «Запуск от имени администратора».

В верхней части вставьте Set-ExecutionPolicy RemoteSigned ; запустите сценарий. Выберите «Да».

Повторите эти шаги для 64-разрядной версии PowerShell ISE (версия для не-x86).

Я просто уточняю шаги, которые намекнул @ Чад Миллер. Спасибо, Чад!

Вы можете обойти эту политику, добавив -ExecutionPolicy ByPass при запуске PowerShell

Powershell -ExecutionPolicy ByPass -File script.ps1

Вы также можете обойти это, используя следующую команду:

PS > powershell Get-Content .\test.ps1 | Invoke-Expression

Если вы находитесь в среде, где вы не являетесь администратором, вы можете установить для нее политику выполнения, и она не потребует администратора.

Set-ExecutionPolicy -Scope "CurrentUser" -ExecutionPolicy "RemoteSigned"

Set-ExecutionPolicy -Scope "CurrentUser" -ExecutionPolicy "Unrestricted"

Help Get-ExecutionPolicy -Full Help Set-ExecutionPolicy -Full

Мы можем получить статус текущей ExecutionPolicy по следующей команде:

Get-ExecutionPolicy;

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

Мы можем установить политику для текущего пользователя как Bypass или Unrestricted , используя любую из приведенных ниже команд PowerShell:

Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Bypass -Force; Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Unrestricted -Force;

Неограниченная политика загружает все файлы конфигурации и запускает все сценарии. Если вы запускаете неподписанный скрипт, который был загружен из Интернета, вам будет предложено получить разрешение до его запуска.

Принимая во внимание, что в политике обхода ничего не блокируется, и во время выполнения сценария нет предупреждений или подсказок. Обход ExecutionPolicy более расслаблен, чем Unrestricted .

Настройка политики выполнения зависит от среды. Если вы пытаетесь выполнить скрипт из текущей x86 ISE вы должны использовать x86 PowerShell для установки политики выполнения. Аналогично, если вы используете 64-разрядную ISE, вам необходимо установить политику с помощью 64-битного PowerShell.

Откройте окно PowerShell в качестве администратора . Это будет работать.

Перейдите в раздел реестра HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell и установите ExecutionPolicy в RemoteSigned .

У меня была аналогичная проблема, и я заметил, что в cmd по умолчанию для Windows Server 2012 был запущен x64.

Для Windows 7 , Windows 8 , Windows Server 2008 R2 или Windows Server 2012 выполните следующие команды в качестве администратора :

x86 (32 бит)
Открыть C:\Windows\SysWOW64\cmd.exe

x64 (64 бит)
Открыть C:\Windows\system32\cmd.exe
Запустите команду powershell Set-ExecutionPolicy RemoteSigned

Вы можете проверить режим, используя

  • В CMD: echo %PROCESSOR_ARCHITECTURE%
  • В Powershell: ::Is64BitProcess

Я использую Windows 10 и не смог выполнить какую-либо команду. Единственная команда, которая дала мне некоторые подсказки, была следующая:

Но это не сработало. Он был ограничен. Возможно, новые политики безопасности для Windows10. У меня была эта ошибка:

Set-ExecutionPolicy: Windows PowerShell успешно обновил вашу политику выполнения, но параметр переопределяется политикой, определенной в более конкретной области. Из-за переопределения ваша оболочка сохранит текущую эффективную политику выполнения...

Поэтому я нашел другой способ (решение ):

  1. Открыть команду запуска / консоли (Win + R)
  2. Тип: gpedit.msc (редактор групповой политики)
  3. Просмотр политики локального компьютера -> Конфигурация компьютера -> Административные шаблоны -> Компоненты Windows -> Windows Powershell .
  4. Включить « Включить выполнение скрипта »
  5. Установите политику по мере необходимости. Я установил для меня « Разрешить все сценарии ».

Теперь откройте PowerShell и наслаждайтесь;)

Win + R и введите команду copy paste и нажмите OK:

Powershell Set-ExecutionPolicy -Scope "CurrentUser" -ExecutionPolicy "RemoteSigned"

И выполните свой скрипт.

Затем верните изменения, например:

Powershell Set-ExecutionPolicy -Scope "CurrentUser" -ExecutionPolicy "AllSigned"

PowerShell обладает рядом режимов исполнения, которые определяют, какой тип кода разрешается выполнять. Все это управляется ключом реестра, живущим в HKLM. Существует 4 различных режима исполнения:

Ограниченный (Restricted): Политика исполнения по умолчанию, не допускает работу скриптов и разрешает работу лишь интерактивных команд.

Все подписанные (All Signed): Допускает работу всех скриптов. Правда, все скрипты и файлы конфигурации должны быть подписаны издателем, которому вы доверяете; данный режим подвергает вас риску работы подписанных (но вредоносных) скриптов, после получения подтверждения доверия издателю.

Удаленные подписанные (Remote Signed): Локальные скрипты работают без подписи. Все скачанные скрипты должны иметь цифровую подпись.

Неограниченный (Unrestricted): Все скрипты и файлы конфигурации, полученные из коммуникационных приложений, вроде Microsoft Outlook, Internet Explorer, Outlook Express и Windows Messenger работают после подтверждения, что вы понимаете, что файл исходит из Интернета; никакие цифровые подписи не требуются; данный режим подвергает вас риску работу неподписанных, вредоносных скриптов.

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

Если вы получаете раздражающую красную ошибку, то, в большинстве случаев, ее появление связано именно с тем, что вы пытаетесь запустить неподписанный скрипт. Самым безопасным способом решения этой проблемы является - изменение политики исполнения на неограниченную, запуск скрипта, и затем обратный возврат к ограниченной политике.

Для изменения политики исполнения на неограниченную, запустите нижеследующую команду в административном PowerShell:

Set-ExecutionPolicy Unrestricted

Вы увидите запрос подтверждения. Нажмите Enter.

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

Set-ExecutionPolicy Restricted

И снова вы увидите запрос подтверждения. Нажмите Enter.

Вот и все! Удачи вам!

По умолчанию выполнение сценариев Windows PowerShell в системе запрещено. По соображениям безопасности все скрипты PowerShell должны быть подписаны цифровой подписью, данный метод называется - политика выполнения . Если скрипт не соответствует этому условию, то выполнение сценариев PowerShell в системе запрещено. Это связано в первую очередь с тем, что в скрипте может находиться вредоносный код, который может нанести вред операционной системе.


PowerShell имеет несколько режимов выполнения, которые определяют, какой тип кода разрешается выполнять. Существует 5 различных режимов выполнения:

Ограниченный (Restricted)
Значение по умолчанию. Блокируется выполнение любых скриптов и разрешается работа интерактивных команд.
Все подписанные (All Signed)
Разрешено выполнение скриптов, имеющих цифровую подпись.
Удаленные подписанные (Remote Signed)
Локальные скрипты работают без подписи. Все скачанные скрипты должны иметь цифровую подпись.
Неограниченный (Unrestricted)
Разрешено выполнение любых скриптов. При запуске не подписанного скрипта, который был загружен из Интернета, программа может потребовать подтверждение.
Обходной (Bypass)
Ничего не блокируется, никакие предупреждения и запросы не появляются.

По умолчанию для PowerShell используется режим «Ограниченный» . В этом режиме, PowerShell работает как интерактивная оболочка. Если вы ранее не настраивали PowerShell, то вместо работы скрипта вы увидите сообщение об ошибке, написанное красным шрифтом как на скриншоте ниже.

Самым безопасным способом решения этой проблемы является – изменение политики выполнения на неограниченную, запуск скрипта, и затем обратный возврат к ограниченной политике.

Для изменения политики выполнения на неограниченную, воспользуемся консолью PowerShell с правами Администратора и выполним следующую команду:

Y (Да )

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

После запуска команды вам будет предложено подтвердить изменение политики выполнения. Ответим Y (Да )

Блокируется выполнение любых скриптов. Значение по умолчанию.

Set-ExecutionPolicy Restricted

Разрешено выполнение скриптов, имеющих цифровую подпись.

Скрипты, подготовленные на локальном компьютере, можно запускать без ограничений, скрипты, загруженные из Интернета - только при наличии цифровой подписи.

Set-ExecutionPolicy RemoteSigned

Разрешено выполнение любых скриптов. При запуске не подписанного скрипта, который был загружен из Интернета, программа может потребовать подтверждение.

Set-ExecutionPolicy Unrestricted

Ничего не блокируется, никакие предупреждения и запросы не появляются.

Для выполнения выше представленных команд без подтверждения изменения, воспользуйтесь параметром
 -Force , например выполните команду:

Set-ExecutionPolicy Bypass -Force

Теперь при выполнении команд не нужно подтверждать производимые изменения.


Рассказать друзьям