По умолчанию выполнение сценариев Windows PowerShell в системе запрещено. По соображениям безопасности все скрипты PowerShell должны быть подписаны цифровой подписью, данный метод называется — политика выполнения.
Если скрипт не соответствует этому условию, то выполнение сценариев PowerShell в системе запрещено. Это связано в первую очередь с тем, что в скрипте может находиться вредоносный код, который может нанести вред операционной системе.
PowerShell имеет несколько режимов выполнения, которые определяют, какой тип кода разрешается выполнять. Существует 5 различных режимов выполнения:
- Ограниченный (Restricted) — значение по умолчанию. Блокируется выполнение любых скриптов и разрешается работа интерактивных команд.
- Все подписанные (All Signed) — разрешено выполнение скриптов, имеющих цифровую подпись.
- Удаленные подписанные (Remote Signed) — локальные скрипты работают без подписи. Все скачанные скрипты должны иметь цифровую подпись.
- Неограниченный (Unrestricted) — разрешено выполнение любых скриптов. При запуске не подписанного скрипта, который был загружен из Интернета, программа может потребовать подтверждение.
- Обходной (Bypass) — ничего не блокируется, никакие предупреждения и запросы не появляются.
По умолчанию для PowerShell используется режим «Ограниченный». В этом режиме, PowerShell работает как интерактивная оболочка. Если вы ранее не настраивали PowerShell, то вместо работы скрипта вы увидите сообщение об ошибке, написанное красным шрифтом как на скриншоте ниже.
Самым безопасным способом решения этой проблемы является – изменение политики выполнения на неограниченную, запуск скрипта, и затем обратный возврат к ограниченной политике.
Для изменения политики выполнения на неограниченную, воспользуемся консолью PowerShell открытую с правами Администратора и выполним следующую команду:
Set-ExecutionPolicy Unrestricted
После запуска команды вам будет предложено подтвердить изменение политики выполнения. Ответим Y (Да).
Теперь можно запустить скрипт. Однако, вы подвергаете систему серьезному риску, так что по окончании работы скрипта, не забудьте вернуть политику выполнения назад в ограниченный режим. Сделать это можно с помощью следующей команды:
Set-ExecutionPolicy Restricted
После запуска команды вам будет предложено подтвердить изменение политики выполнения. Ответим Y (Да)
Далее ниже представлены все команды для изменения политики выполнения.
Блокируется выполнение любых скриптов. Значение по умолчанию.
Set-ExecutionPolicy Restricted
Разрешено выполнение скриптов, имеющих цифровую подпись.
Set-ExecutionPolicy AllSigned
Скрипты, подготовленные на локальном компьютере, можно запускать без ограничений, скрипты, загруженные из Интернета — только при наличии цифровой подписи.
Set-ExecutionPolicy RemoteSigned
Разрешено выполнение любых скриптов. При запуске не подписанного скрипта, который был загружен из Интернета, программа может потребовать подтверждение.
Set-ExecutionPolicy Unrestricted
Ничего не блокируется, никакие предупреждения и запросы не появляются.
Set-ExecutionPolicy Bypass
Для выполнения выше представленных команд без подтверждения изменения, воспользуйтесь параметром -Force, например выполните команду:
Set-ExecutionPolicy Bypass -Force
Теперь при выполнении команд не нужно подтверждать производимые изменения.
В операционной системе Windows 10 имеется мощный инструмент для управления и выполнения различных задач — это PowerShell. Эта консоль предназначена для администраторов, поскольку она позволяет им контролировать всю операционную систему с помощью сценариев (script). PowerShell используется многими фоновыми приложениями для внесения изменений в систему и это ставит под угрозу безопасность нашего ПК.
Сценарий (script) — простая программа написана в коде, который работает линейно на нашем компьютере. Мы можем создавать и выполнять собственные сценарии для автоматизации задач, или приложения могут выполнять их для выполнения определенных конфигураций и задач. По умолчанию Windows 10 не запрещает ни приложениям, ни нам запускать сценарии в системе, если они подписаны или являются «своими». Проблема возникает, когда мы запускаем свой скрипт, и нам выдает ошибку «Выполнение сценариев отключено в этой системе«. Это многоуровневая мера безопасности в PowerShell, которая предотвращает запуск вредоносных сценариев и может нанести вред системе. Давайте разберем, как изменить политики безопасности для PowerShell.
Политики выполнения скриптов в PowerShell
Если вы увидели ошибку «Выполнение сценариев отключено в этой системе«, то можем проверить конфигурацию политик для запуска сценариев, которые настроены в Windows 10. Откройте PowerShell от имени администратора и:
Get-ExecutionPolicy -List
Мы можем видеть несколько уровней разрешений политик для запуска сценариев.
Чтобы изменить политику запуска скрипта, вы должны знать различные уровни привилегий, которые мы можем назначить каждому из областей.
- Restricted: заблокировано выполнение любых скриптов, но разрешается работа интерактивных команд.
- RemoteSigned: загруженные скрипты должны быть подписаны доверенным издателем. Локальные скрипты работают без подписи
- AllSigned: разрешает выполнение любого подписанного скрипта, как локального, так и удаленного (загруженного).
- Unrestricted: без ограничений. Вы можете запустить все сценарии, даже те, которые не подписаны.
Когда вы знаете условия и ограничения скриптов, то можете изменить их. К примеру, чтобы исправить ошибку «Выполнение сценариев отключено в этой системе» достаточно ввести один апплет. Откройте PowerShell от имени админа и:
Set-ExecutionPolicy Unrestricted -Scope CurrentUser
— запуск без ограничения для пользователя.Set-ExecutionPolicyRestricted -Scope CurrentUser
вернуть назад, если будет нужно.
Разрешает без ограничений выполнять сценарии для локального пользователя. Ключ -Scope определяет, к чему применяется изменение политики. Когда вы вводите «CurrentUser«, то применяется только к текущему пользователю, а когда вы вводите «LocalMachine«, он применяется ко всей системе.
Если выше способ не помог вам запустить свой скрипт и ошибка «Выполнение сценариев отключено в этой системе» появляется, то можно снять полностью ограничения. Вы должны понимать, что это большой риск и ваш скрипт должен быть безопасен на 101%. Откройте PowerShell от имени админа и:
Set-ExecutionPolicy Unrestricted
— разрешить выполнение скриптов без ограничений.Set-ExecutionPolicy Restricted
— вернуть назад по умолчанию.
Смотрите еще:
- Что за папка ProgramData Windows 10
- Исправить ошибку Boot Device Not Found на ноутбуке или ПК
- Antimalware Service Executable (MsMpEng) — Грузит Систему
- Ошибка 0x80070490 в Центре обновления Windows 10
- Защитник Windows: Ограничить нагрузку на процессор
[ Telegram | Поддержать ]
Содержание
- Способ 1: Настройка локальной политики
- Способ 2: Редактирование реестра
- Способ 3: Консольная команда
- Вопросы и ответы
Способ 1: Настройка локальной политики
По умолчанию запуск сценариев PowerShell запрещен политикой выполнения функций средства, что обусловлено требованиями безопасности и призвано предотвратить возможность исполнения отдельных вредоносных скриптов в среде Windows. Изменить такое положение вещей в общем-то несложно, а основной способ это сделать подразумевает привлечение «Редактора локальной групповой политики» («РЛГП»).
«РЛГП» по умолчанию доступен только в Windows 10 редакций «Pro» и «Enterprise», пользователям «Home»-выпуска операционки с конечной целью запуска PowerShell-сценариев следует сразу переходить к рассмотрению инструкций «Способ 2» и «3» в этой статье.
- Открываем окно «Редактора локальной групповой политики». Проще всего это сделать введя запрос
Изменение групповой политики
в системный «Поиск» Виндовс,
также возможно через оснастку «Выполнить» (открывается по нажатию «Win»+«R» на клавиатуре) – оправляем с её помощью на выполнение команду:
gpedit.msc
Читайте также: Запуск «Редактора локальной групповой политики» в Windows 10
- Задействовав средства левой части окна РЛГП, в разделе «Конфигурация компьютера» поочередно разворачиваем каталоги: «Административные шаблоны»,
затем из него — «Компоненты Windows».
- В содержимом «Компоненты Windows» находим и кликом выделяем каталог «Windows Powershell».
- Перемещаемся в область справа окна Редактора, кликаем правой кнопкой манипулятора (ПКМ) по наименованию политики «Включить выполнение сценариев».
В отобразившемся меню выбираем «Изменить».
- В открывшемся средстве изменения параметров политики «Включить выполнение сценариев» переводим расположенную в правой верхней части окна радиокнопку в положение «Включено».
Кроме того, переходим здесь в блок «Параметры:», щёлкаем по изначально пустому раскрывающемуся списку «Политика выполнения»,
выбираем в нём «Разрешать все сценарии».
- Завершив конфигурирование политики вышеуказанным образом, нажимаем «ОК».
На этом всё, закрываем окно средства изменения локальной групповой политики – возможность запуска, по сути, любых сценариев PowerShell в текущем экземпляре Windows 10 получена.
Способ 2: Редактирование реестра
Параметры политик выполнения сценариев ПоверШелл для локального компьютера, а также его текущего пользователя сохранены в главной базе данных настроек Виндовс 10 — системном реестре. Соответственно, изменив здесь значения отдельных записей, можно решить в том числе и задачу из заголовка этой статьи.
- Открываем «Редактор реестра». Существует множество способов это сделать, наиболее быстрые: отыскать ссылку на запуск приложения через системный «Поиск»,
отправить команду
regedit
через оснастку «Выполнить».Подробнее: Способы открытия «Редактора реестра» в Windows 10
- Кликая по разворачивающим разделы из перечня слева в окне «Редактора реестра» элементам, переходим по следующему пути:
HKEY_LOCAL_MACHINESOFTWAREPoliciesMicrosoftWindows
Другой метод перемещения в нужный раздел реестра: копируем путь к нему из текста этой статьи в буфер обмена Windows 10, затем вставляем данные в поле под строкой меню Редактора, нажимаем «Enter».
- Выделив (щелчком ЛКМ по наименованию в панели слева окна Редактора) расположенную по указанному выше пути папку «Windows», вызываем меню «Правка»,
кликаем в нём «Создать» — «Раздел».
- Далее вводим имя сформированного каталога – PowerShell,
нажимаем «Ввод» на клавиатуре.
- Переходим в правую часть окна Редактора, кликаем ПКМ в её свободной от значков и записей области, в открывшемся контекстном меню нажимаем «Создать» — «Параметр DWORD (32 бита)».
- Присваиваем созданному объекту наименование EnableScripts,
дважды щёлкаем по нему.
- В поле «Значение» отобразившегося окошка «Изменение параметра DWORD (32 бита)» вместо 0 пишем 1,
после этого кликаем «ОК».
- Вновь кликаем ПКМ в отображающей параметры из раздела реестра «PowerShell» области, теперь выбираем в меню «Создать» — «Строковый параметр».
- В качестве имени параметра вводим ExecutionPolicy,
после чего двойным кликом по получившемуся объекту открываем окошко его изменения.
- В поле «Значение:» вводим RemoteSigned,
щёлкаем «ОК» мышкой.
- На этом всё – закрываем окно «Редактора реестра», перезагружаем компьютер и можем приступать к отныне беспроблемному и практически ничем не ограничиваемому запуску сценариев PowerShell.
Способ 3: Консольная команда
Еще один метод устранения предусмотренных в Windows 10 преград для выполнения PowerShell-сценариев реализовать гораздо проще, нежели вышеописанные подходы, но решение в большей степени единоразовое (действует в рамках одного сеанса работы с консольной оболочкой). Подойдёт, когда нужно задействовать один-единственный скрипт рассматриваемого типа или это требуется редко.
- Запускаем приложение PowerShell от имени Администратора. Один из вариантов это сделать – средствами системной оснастки «Выполнить»:
- Нажимаем «Win»+«R» на клавиатуре, вводим в поле «Открыть» отобразившегося окошка такую команду:
рowershell
- Далее нажимаем «Ctrl»+«Shift» на клавиатуре и, удерживая эти клавиши, кликаем «ОК» в окне «Выполнить» левой кнопкой мыши.
- Подтверждаем («Да») поступивший из системного модуля «Контроль учётных записей» запрос.
Читайте также: Запуск «PowerShell» в ОС Windows 10
- Нажимаем «Win»+«R» на клавиатуре, вводим в поле «Открыть» отобразившегося окошка такую команду:
- Вводим и запускаем команду перевода политики выполнения сценариев PowerShell в состояние, когда ею ничего не блокируется:
Set-ExecutionPolicy Bypass
- Введя
Y
и затем нажав «Enter», подтверждаем запрос системы «Вы хотите изменить политику выполнения?». - На этом всё – возможности выполнять сценарии теперь ничего не препятствует и так будет продолжаться до момента закрытия сессии ПоверШелл. Вводим в консоль путь на диске ПК, по которому расположен целевой исполняемый файл рассматриваемого типа, инициируем его запуск.
Читайте также: Как скачать ISO-образ Windows при помощи PowerShell-скрипта Fido
Еще статьи по данной теме:
Помогла ли Вам статья?
В настоящее время в каждую Windows предустановлен PowerShell.
PowerShell — это не только консоль предоставляющая доступ к утилитам командной строки, но и мощное средство администрирования и автоматизации. В PowerShell реализовано множество команд и функций, которые могут добавляться как модули устанавливаемым программным обеспечением.
PowerShell поддерживает как выполнение отдельных команд, так и пакетные файлы с набором команд, то есть скрипты. Эти скрипты можно назвать аналогами файлов .bat для оболочки CMD (которая, кстати, по-прежнему доступна в Windows).
Но при попытке запуска скрипта PowerShell вас, вероятно, ждёт неприятный сюрприз. К примеру, моя попытка выполнить файл PowerShell с расширением .ps1:
.Invoke-SMBClient.ps1
Эта команда вызвала ошибку:
.Invoke-SMBClient.ps1 : Невозможно загрузить файл C:UsersMiAlDownloadsInvoke-TheHash-ma sterInvoke-SMBClient.ps1, так как выполнение сценариев отключено в этой системе. Для получе ния дополнительных сведений см. about_Execution_Policies по адресу https:/go.microsoft.com/f wlink/?LinkID=135170. строка:1 знак:1 + .Invoke-SMBClient.ps1 + ~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : Ошибка безопасности: (:) [], PSSecurityException + FullyQualifiedErrorId : UnauthorizedAccess
Ключевой является информация:
Невозможно загрузить файл ....ps1, так как выполнение сценариев отключено в этой системе
Причина ошибки в том, что в системе Windows по умолчанию запрещено запускать пакетные файлы, скрипты PowerShell.
Как разрешить в Windows выполнение скриптов PowerShell
Проблема заключается в том, что политика выполнения скриптов запрещает выполнять эти самые скрипты. Узнать текущее значение политики можно командой:
Get-ExecutionPolicy
Для своей системы я получил значение:
Restricted
Чтобы разрешить выполнение файлов с расширением .ps1, то есть чтобы запустить скрипт PowerShell в Windows, выполните команду:
Set-ExecutionPolicy unrestricted
Когда поступит запрос, введите Y.
Данные команды нужно выполнять в PowerShell, а не в CMD.
Как запретить в Windows выполнение скриптов PowerShell
Чтобы вновь включить запрет на выполнение пакетных файлов в PowerShell достаточно выполнить команду:
Set-ExecutionPolicy Restricted
Опасно ли разрешать выполнение файлов со скриптами PowerShell в Windows?
При выполнении команды по изменению политика запуска скриптов каждый раз показывается сообщение:
Изменение политики выполнения Политика выполнения защищает компьютер от ненадежных сценариев. Изменение политики выполнения может поставить под угрозу безопасность системы, как описано в разделе справки, вызываемом командой about_Execution_Policies и расположенном по адресу https:/go.microsoft.com/fwlink/?LinkID=135170 . Вы хотите изменить политику выполнения? [Y] Да - Y [A] Да для всех - A [N] Н
Предупреждение кажется довольно страшным, но в самой справке, на которую дана ссылка, написано, что данная политика запрета запуска скриптов не является мерой безопасности, поскольку пользователь по-прежнему может выполнить команды одну за другой. Более того, у хакеров есть возможность обойти этот запрет и запустить скрипт даже при отключённой политике.
Как сказано в документации, это мера для предотвращения случайного выполнения скриптов PowerShell и случайных изменений.
То есть в целом изменение этой настройки не уменьшает уровень безопасности системы. Но если вы редко запускаете скрипты PowerShell, то можете установить уровень Restricted, то есть запрет выполнения сценариев.
Ошибка «»Set-ExecutionPolicy» не является внутренней или внешней командой, исполняемой программой или пакетным файлом»
Если при выполнении
C:Windowssystem32>Set-ExecutionPolicy unrestricted
вы получили ошибку
"Set-ExecutionPolicy" не является внутренней или внешней командой, исполняемой программой или пакетным файлом.
то это означает, что вы запускаете указанную команду в CMD (командная строка Windows), а не в PowerShell. Чтобы ошибка исчезла, откройте PowerShell и выполните команду там.
Ошибки «Отказано в доступе к разделу реестра «HKEY_LOCAL_MACHINESOFTWAREMicrosoftPowerShell1ShellIds» и «Access to the path ‘C:Program FilesPowerShell7-previewpowershell.config.json’ is denied»
Во время выполнения команды
Set-ExecutionPolicy unrestricted
Вы можете столкнуться с ошибкой:
Set-ExecutionPolicy : Отказано в доступе к разделу реестра "HKEY_LOCAL_MACHINESOFTWAREMicrosoftPowerShell1ShellIdsMicrosoft.PowerShell". Чтобы изменить политику выполнения для области (LocalMachine), используемой по умолчанию, запустите Windows PowerShell с параметром "Запуск от имени администратора". Чтобы изменить политику выполнения для текущего пользователя, выполните "Set-ExecutionPolicy -Scope CurrentUser". строка:1 знак:1 + Set-ExecutionPolicy unrestricted + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : PermissionDenied: (:) [Set-ExecutionPolicy], UnauthorizedAccessException + FullyQualifiedErrorId : System.UnauthorizedAccessException,Microsoft.PowerShell.Commands.SetExecutionPolicyCommand
В PowerShell 7.* ошибка выглядит так:
Set-ExecutionPolicy: Access to the path 'C:Program FilesPowerShell7-previewpowershell.config.json' is denied. To change the execution policy for the default (LocalMachine) scope, start PowerShell with the "Run as administrator" option. To change the execution policy for the current user, run "Set-ExecutionPolicy -Scope CurrentUser".
Причина ошибки в том, что указанную команду нужно выполнять с правами администратора.
Чтобы запустить PowerShell с правами администратора, нажмите «Win+x», либо правой кнопкой мыши по меню «Пуск».
И выберите «PowerShell (Администратор)» либо «Терминал Windows (Администратор)».
Смотрите также:
- Как установить PowerShell 7 в Windows 10
- Настройка рабочего окружения PowerShell в Windows и Linux
- Доступен новый Windows Terminal — он потрясающий
Связанные статьи:
- Не работает DNS через VPN в Windows 10 (РЕШЕНО) (94.4%)
- Windows 10: нет подключения к Интернету после подключения к VPN-серверу (РЕШЕНО) (94.4%)
- Ошибка ImageMagick в Windows: «magick: unable to open image »test’: No such file or directory @ error/blob.c/OpenBlob/3565. magick: no decode delegate for this image format `’ @ error/constitute.c/ReadImage/741.» (РЕШЕНО) (94.4%)
- Проигрыватель Windows не показывает или плохо показывает видео (РЕШЕНО) (81.1%)
- Ошибка «Файл слишком большой для файловой системы получателя» (РЕШЕНО) (81.1%)
- Что такое инструменты SysInternals и как их использовать? (RANDOM — 55.6%)
The following will allow all local scripts to execute on the VM, irrespective of whether they’re signed or not:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope LocalMachine
I am going to go out on a limb here and just rehash a portion of About Execution Policies.
The default execution policy for Windows client OSes is Restricted. This means that a script will not run automatically. If your VM has a Windows client OS and you have never changed the execution policy, then your issue is expected. If the one Windows 10 machine works without issues, then someone changed the execution policy.
On the problematic VMs, you will need to determine the scope (or account) that is running your script. Then you will need to set the execution policy accordingly.
If you are testing running a script while logged into the server as yourself, then you can just open a PowerShell console and run the following:
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
Then run the script in that same console.
The following command will list the execution policy for all scopes on that machine:
Get-ExecutionPolicy -List
You should compare the command above on the working system and the non-working system. Your issue likely be the execution policy setting for the particular scope that is running the script. If you read the link in my post, it should help you determine what you need to change specifically.
The following will allow all local scripts to execute on the VM, irrespective of whether they’re signed or not:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope LocalMachine
I am going to go out on a limb here and just rehash a portion of About Execution Policies.
The default execution policy for Windows client OSes is Restricted. This means that a script will not run automatically. If your VM has a Windows client OS and you have never changed the execution policy, then your issue is expected. If the one Windows 10 machine works without issues, then someone changed the execution policy.
On the problematic VMs, you will need to determine the scope (or account) that is running your script. Then you will need to set the execution policy accordingly.
If you are testing running a script while logged into the server as yourself, then you can just open a PowerShell console and run the following:
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
Then run the script in that same console.
The following command will list the execution policy for all scopes on that machine:
Get-ExecutionPolicy -List
You should compare the command above on the working system and the non-working system. Your issue likely be the execution policy setting for the particular scope that is running the script. If you read the link in my post, it should help you determine what you need to change specifically.