Поиск по сайту:

Как исправить "Запуск сценариев отключен в этой системе" PowerShell


При попытке запустить скрипт PowerShell вы получаете ошибку “Невозможно загрузить, потому что выполнение скриптов отключено на этой системе”? Тогда нам нужно изменить политику выполнения в PowerShell. Чтобы защитить ваш компьютер от вредоносных скриптов, политика выполнения PowerShell по умолчанию установлена на ограниченную.

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

Эта настройка по умолчанию не позволит вам запускать любые скрипты PowerShell на вашем компьютере, даже те скрипты, которые вы написали сами. К счастью, мы можем легко изменить политику с помощью одной команды в PowerShell.

В этой статье я объясню, как быстро исправить ошибку "выполнение скриптов отключено на этой системе", какие существуют различные политики и как изменить это на всех компьютерах с помощью групповой политики.

Исправьте Запуск скриптов отключен на этой системе

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

  1. Откройте PowerShell или Windows Terminal

  2. Введите команду ниже, чтобы запустить ваш скрипт

    powershell -ExecutionPolicy Bypass -File script.ps1

Указанный выше метод временно обходит политику выполнения. Это отлично работает для одного файла, но требует повторного использования команды каждый раз, когда вы хотите запустить файл. Более устойчивое решение — изменить политику выполнения.

Изменение политики выполнения на постоянно

Когда вы много работаете с PowerShell-скриптами, вы, вероятно, захотите изменить политику выполнения на постоянной основе. Но прежде чем мы рассмотрим, как изменить политику, давайте сначала объясним ее цель и различные доступные политики.

Политика выполнения не предназначена как система безопасности для ограничения пользователей в выполнении скриптов PowerShell. Каждый пользователь может просто обойти политику в своей текущей сессии PowerShell или даже скопировать и вставить содержимое скрипта прямо в консоль. Так для чего же нужна эта политика? Что ж, она предназначена для предотвращения непреднамеренного выполнения скриптов PowerShell.

При изменении политики у нас есть пять вариантов на выбор:

Политика выполненияОписание
ЗапрещеноОпция по умолчанию – Не позволяет запускать никакие скрипты PowerShell
НеограниченныйМожет выполнять любой скрипт, показывает предупреждение для загруженных скриптов.
Удаленно подписаноТребуется цифровая подпись для загруженных скриптов. Вы можете
использовать локально написанные скрипты. Вы можете разблокировать загруженные скрипты
для их выполнения без подписи.
БайПассВы можете выполнять все сценарии, и предупреждения не отображаются.
ВсеПодписаноВы можете запускать только подписанные скрипты от доверенных издателей.
Политики выполнения PowerShell

Большинство людей склонны устанавливать политику на неограниченную, что позволяет запускать любые скрипты PowerShell. Но лучшим вариантом является использование политики RemoteSigned. Таким образом, вы можете запускать любые локально написанные скрипты, но сначала вам придется разблокировать все загруженные скрипты. Это дополнительное управление предотвращает случайную загрузку и запуск вредоносных скриптов PowerShell на их системе.

Все пользователи vs Текущий пользователь

При изменении политики мы также можем определить объем изменений. Для политики доступны следующие объемы:

ОбъемОписание
ТекущийПользовательПолитика настроена только для текущего пользователя.
Локальная машинаПолитика изменена для всех пользователей на этом компьютере
ПроцессПолитика изменяется только для текущей сессии PowerShell.
Политики выполнения по областям

Установить политику выполнения для текущего пользователя

Таким образом, наиболее распространенный сценарий заключается в том, что вы хотите изменить политику выполнения PowerShell для текущего пользователя. Это решит ошибку «выполнение скриптов отключено в этой системе» для вошедшего в систему пользователя. Мы установим политику на RemoteSigned, что означает, что пользователю все равно придется выполнить дополнительный шаг для загруженных скриптов.

  1. Откройте PowerShell
  2. Введите команду ниже и нажмите ввод
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
  1. По желанию - Проверьте настройку с помощью команды Get-ExecutionPolicy

Установить политику выполнения

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

Когда вы пытаетесь запустить загруженный скрипт PowerShell с политикой выполнения RemoteSigned, возникает ошибка, что файл не может быть загружен. Скрипт PowerShell не подписан цифровой подписью:

Не цифровая подпись

Чтобы решить эту проблему, вам сначала нужно разблокировать файл. Для этого мы, конечно, можем использовать командлет PowerShell, Unblock-File. Просто введите командлет, за которым следует имя файла/путь:

Unblock-File -path .\CreateTestFiles.ps1

Разблокировать удаленные файлы

Установить политику выполнения для всех пользователей

Мы также можем изменить политику для всех пользователей на компьютере. Для этого вам понадобятся повышенные права (права администратора).

  1. Щелкните правой кнопкой мыши на меню "Пуск" или нажмите клавишу Windows + X
  2. Выберите Windows PowerShell (Администратор) или Windows Terminal (Администратор)
  3. Введите следующую команду:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope LocalMachine

Set-ExecutionPolicy

Мы можем проверить результаты с помощью команды Get-ExecutionPolicy -List, которая показывает политику для каждого уровня. Стоит знать, что политика CurrentUser имеет приоритет над политикой LocalMachine. Поэтому, когда вы устанавливаете политику CurrentUser в ограниченную, а LocalMachine в RemoteSigned, пользователь всё равно не сможет выполнить никакой PowerShell скрипт, потому что политика, установленная в области CurrentUser, переопределяет политику LocalMachine.

Измените политику только для текущих сессий

Другой вариант - изменить политику только для текущей сессии PowerShell. Этот метод полезен, когда вам нужно запустить несколько сценариев PowerShell, но вы не хотите изменять политику навсегда. Вы можете использовать опцию Bypass для каждого сценария, но также возможно изменить область действия только для текущей сессии PowerShell. Для этого используйте область Process:

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process

Установите политику выполнения PowerShell с помощью GPO

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

  1. Откройте Редактор управления групповыми политиками и создайте новую политику.
  2. Развернуть конфигурацию компьютера
  3. Перейдите в Политики > Административные шаблоны > Компоненты Windows > Windows PowerShell
  4. Откройте настройки Включить выполнение скриптов

  1. Измените настройку на Включено
  2. Выберите Политику выполнения Разрешить локальные скрипты и удаленные подписанные скрипты. Это то же самое, что RemoteSigned, что мы устанавливали ранее.

Мы можем проверить настройку на одном из клиентов, которые являются членами организационной единицы, где мы только что применили настройку. Сначала убедитесь, что последняя политика применена на компьютере с помощью команды GPUpdate. При желании вы можете использовать команду RSOP для проверки политики или просто проверить, установлена ли политика выполнения с помощью команды:

Get-ExecutionPolicy -list

Result
        Scope ExecutionPolicy
        ----- ---------------
MachinePolicy    RemoteSigned
   UserPolicy    RemoteSigned
      Process       Undefined
  CurrentUser       Undefined
 LocalMachine       Undefined

Как упоминалось, преимущество политик заключается в том, что пользователи больше не могут изменять политику. Когда вы используете командлет set-executionpolicy, вы получите ошибку о том, что политика изменена, но настройка игнорируется политикой, определенной на более специфическом уровне:

Заключение

Лучший способ установить политику выполнения в PowerShell — использовать групповую политику. Таким образом, все существующие и новые машины в вашем домене могут быть настроены с правильной политикой. Конечно, вы можете создать другую политику для IT-отдела.

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