Ошибка «Невозможно загрузить файл ….ps1, так как выполнение сценариев отключено в этой системе» (РЕШЕНО)

В настоящее время в каждую Windows предустановлен PowerShell.

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

PowerShell поддерживает как выполнение отдельных команд, так и пакетные файлы с набором команд, то есть скрипты. Эти скрипты можно назвать аналогами файлов .bat для оболочки CMD (которая, кстати, по-прежнему доступна в Windows).

Но при попытке запуска скрипта PowerShell вас, вероятно, ждёт неприятный сюрприз. К примеру, моя попытка выполнить файл PowerShell с расширением .ps1:

.\Invoke-SMBClient.ps1

Эта команда вызвала ошибку:

.\Invoke-SMBClient.ps1 : Невозможно загрузить файл C:\Users\MiAl\Downloads\Invoke-TheHash-ma
ster\Invoke-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:\Windows\system32>Set-ExecutionPolicy unrestricted

вы получили ошибку

"Set-ExecutionPolicy" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.

то это означает, что вы запускаете указанную команду в CMD (командная строка Windows), а не в PowerShell. Чтобы ошибка исчезла, откройте PowerShell и выполните команду там.

Ошибки «Отказано в доступе к разделу реестра "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds» и «Access to the path 'C:\Program Files\PowerShell\7-preview\powershell.config.json' is denied»

Во время выполнения команды

Set-ExecutionPolicy unrestricted

Вы можете столкнуться с ошибкой:

Set-ExecutionPolicy : Отказано в доступе к разделу реестра "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.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 Files\PowerShell\7-preview\powershell.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 (Администратор)».

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


Comments

  1. Спасибо большое за материал. По какой-то причине у меня выдает "Set-ExecutionPolicy" не является внутренней или внешней
    командой, исполняемой программой или пакетным файлом.

  2. СПАИСБО ОГРОМНОЕ! надеюсь найти данный сайт после переустановки винды 🙂

  3. Спасибо. Для тебя отдельное место в раю обеспечено…

  4. У меня еще поругалось после команды "unrestricted", вот так---->
    Set-ExecutionPolicy unrestricted
    Set-ExecutionPolicy : Отказано в доступе к разделу реестра "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1
    \ShellIds\Microsoft.PowerShell". Чтобы изменить политику выполнения для области (LocalMachine), используемой п 
    о умолчанию, запустите Windows PowerShell с параметром "Запуск от имени администратора". Чтобы изменить полити 
    ку выполнения для текущего пользователя, выполните "Set-ExecutionPolicy -Scope CurrentUser".
    строка:1 знак:1
    + Set-ExecutionPolicy unrestricted <----

    выполнил команду  "Set-ExecutionPolicy -Scope CurrentUser" , нажал '1',  >>  пока заработало) Спасибище!

  5. Set-ExecutionPolicy : Отказано в доступе к разделу реестра "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds
    \Microsoft.PowerShell". Чтобы изменить политику выполнения для области (LocalMachine), используемой по умолчанию, запус
    тите Windows PowerShell с параметром "Запуск от имени администратора". Чтобы изменить политику выполнения для текущего
    пользователя, выполните "Set-ExecutionPolicy -Scope CurrentUser".
    строка:1 знак:1
    + Set-ExecutionPolicy unrestricted
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : PermissionDenied: (:) [Set-ExecutionPolicy], UnauthorizedAccessException
        + FullyQualifiedErrorId : System.UnauthorizedAccessException,Microsoft.PowerShell.Commands.SetExecutionPolicyComma
     

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

wp-puzzle.com logo