По умолчанию запуск скриптов PowerShell может быть запрещён.
Пытаюсь запустить скрипт, получаю ошибку:
Не удается загрузить файл. Файл не имеет цифровой подписи. Невозможно выполнить сценарий в указанной системе.
Посмотрим текущее значение политики выполнения скриптов PowerShell:
Get-ExecutionPolicy
Возможные варианты:
- Restricted – запрещен запуск скриптов PowerShell, можно выполнять только интерактивные команды.
- AllSigned – разрешено выполнять только скрипты с цифровой подписью от доверенного издателя.
- RemoteSigned – можно запускать локальные PowerShell скрипты без ограничения. Можно запускать удаленные PowerShell скрипты с цифровой подписью. Нельзя запускать PS1 файлы, скачанные из Интернета. В свойствах скачанного файла можно "Разблокировать" запуск скрипта.
- Unrestricted – разрешен запуск любых PowerShell скриптов.
- Bypass – разрешён запуск любых PowerShell скриптов. Эта политика обычно используется для автоматического запуска PS скриптов без вывода каких-либо уведомлений и не рекомендуется для постоянного использования.
- Default – сброс настроек выполнения скриптов на стандартные.
У меня установлена политика AllSigned, поэтому неподписанный скрипт не запустился.
Для изменения текущего значения политики запуска PowerShell скриптов используется командлет Set-ExecutionPolicy.
Set-ExecutionPolicy Bypass
Как видно из скриншота, политика запуска PowerShell скриптов изменилась, но... не изменилась. Такая ошибка появляется, если политики запуска PowerShell скриптов управляются групповыми политиками, например, если компьютер в домене.
В этом случае нам поможет реестр. В разделе
\HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\PowerShell
Установить ExecutionPolicy=Bypass.
Ещё можно запустить скрипт с явно указанной политикой:
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
Например:
Set-ExecutionPolicy -Scope MachinePolicy -ExecutionPolicy Bypass –Force
Возможные варианты:
- LocalMachine — для всех пользователей данного компьютера. Значение хранится в реестре, в разделе HKEY_LOCAL_MACHINE.
- CurrentUser — для текущего пользователя. Хранится в разделе реестра HKEY_CURRENT_USER.
- Process — в текущем сеансе PowerShell. Значение хранится в переменной окружения $PSExecutionPolicyPreference и при закрытии сеанса удаляется.
- UserPolicy — для всех пользователей данного компьютера. Распространяется с помощью групповых политик. Значение хранится в разделе пользователя, политика применяется при входе пользователя в систему.
- MachinePolicy — действует на всех пользователей данного компьютера. Распространяется с помощью групповых политик. Значение хранится в разделе компьютера, политика применяется при загрузке системы.
Ссылки
Может пригодиться:
Powershell — невозможно загрузить файл ps1, так как выполнение сценариев отключено в этой системе