Перейти к основному содержанию

Разрешить запуск скриптов PowerShell

PowerShell

По умолчанию запуск скриптов PowerShell может быть запрещён.

Пытаюсь запустить скрипт, получаю ошибку:

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

powershell

Посмотрим текущее значение политики выполнения скриптов PowerShell:

Get-ExecutionPolicy

powershell

Возможные варианты:

  • Restricted – запрещен запуск скриптов PowerShell, можно выполнять только интерактивные команды.
  • AllSigned – разрешено выполнять только скрипты с цифровой подписью от доверенного издателя.
  • RemoteSigned – можно запускать локальные PowerShell скрипты без ограничения. Можно запускать удаленные PowerShell скрипты с цифровой подписью. Нельзя запускать PS1 файлы, скачанные из Интернета. В свойствах скачанного файла можно "Разблокировать" запуск скрипта.
  • Unrestricted – разрешен запуск любых PowerShell скриптов.
  • Bypass – разрешён запуск любых PowerShell скриптов. Эта политика обычно используется для автоматического запуска PS скриптов без вывода каких-либо уведомлений и не рекомендуется для постоянного использования.
  • Default – сброс настроек выполнения скриптов на стандартные.

У меня установлена политика AllSigned, поэтому неподписанный скрипт не запустился.

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

Set-ExecutionPolicy Bypass

powershell

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

В этом случае нам поможет реестр. В разделе

\HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\PowerShell

Установить ExecutionPolicy=Bypass.

powershell

Ещё можно запустить скрипт с явно указанной политикой:

powershell.exe -noprofile -executionpolicy bypass -file c:\ps\hello.ps1

Или так:

Get-Content c:\ps\hello.ps1 | PowerShell.exe -noprofile -executionpolicy bypass

Можно установить не только политику запуска PowerShell скриптов, но и зону её действия с помощью параметра Scope.

Get-ExecutionPolicy -List

powershell

Например:

Set-ExecutionPolicy -Scope MachinePolicy -ExecutionPolicy Bypass –Force

Возможные варианты:

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

Ссылки

Может пригодиться:

Powershell — невозможно загрузить файл ps1, так как выполнение сценариев отключено в этой системе

Теги

 

Похожие материалы

Windows Terminal — больше чем терминал

Windows Terminal — терминальное приложение в Windows 10 для разработчиков и системных администраторов. Инструмент позволяет в одном окне в режиме вкладок запускать различные оболочки командной строки, PowerShell и WSL. В одной вкладке может отображаться несколько панелей.

Запуск PowerShell скрипта в Планировщике заданий

Системному администратору часто приходится писать разные скрипты и настраивать их запуск по расписанию в Планировщике заданий (Task Scheduler). Простой пример ниже.

Теги

PowerShell — список пользователей с истёкшим паролем

С точки зрения информационной безопасности системному администратору имеет смысл ограничивать срок действия пароля пользователя в AD. Что мы и делаем. А пользователи этот пароль вовремя не меняют, а потом пишут: "Ааааа, не могу войти!"

Теги