Windows 10/11 с настройками по-умолчанию блокирует запуск неподписанных PowerShell скриптов. Это означает, что если вы попробуете вручную запустить PS1 файл скрипта или PSM1 модуля из консоли powershell.exe
или pwsh.exe
, появится ошибка:
Невозможно загрузить файл *.PS1, так как выполнение сценариев отключено в этой системе.
File C:\PS\test_script.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.
В Windows возможностью запуска файлов с PowerShell скриптами (расширение *.PS1) ограничивается настройками политики выполнения скриптов (Script Execution Policy).
Текущие настройки политики выполнения PowerShell скриптов на компьютере можно вывести командой:
Get-ExecutionPolicy –List
По умолчанию в Windows запуск PowerShell скриптов блокируется с помощью значения Restricted для области LocalMachine. Остальные четыре области (MachinePolicy, UserPolicy, Process, CurrentUser) не настроены (Undefined). Это означает что в сессии будет применяться политика для области LocalMachine.
Настройки политики Script Execution Policy по умолчанию защищают Windows от запуска потенциально опасного кода в PowerShell скриптах. В большинстве случаев в целях безопасности не рекомендуется изменять настройки политики выполнения скриптов на компьютерах.
Если вам нужно разово запустить файл с PowerShell скриптом, и вы не хотите глобально менять настройки безопасности Windows, временно разрешите запуск скриптов в текущем процессе PowerShell.
Выполните команду:
Set-ExecutionPolicy -Scope Process -ExecutionPolicy RemoteSigned
Теперь попробуйте выполнить ваш PS1 файл в этой же консоли. PowerShell скрипт должен успешно запустится.
Как вы видите, значение Execution Policy для scope Process изменилось на RemoteSigned. Это тип политики разрешает запуск любых локальных PS1 файлов, но требует наличие доверенной цифровой подписи для всех PowerShell файлов, скачанных их Интернета.
В данном примере мы изменили настройки Execution Policy только для текущего процесса PowerShell. После того, как вы закроете консоль pwsh.exe/powershell.exe, или завершите сессию Windows, запуск скриптов PowerShell будет опять запрещен. Кроме того, этот способ позволит вам переопределить текущие настройки Execution Policy для процесса под пользователей без прав администратора.
Set-ExecutionPolicy: Access to the path ‘C:\Program Files\PowerShell\7\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 скрипт из bat файла, или задания планировщика (Task Scheduler), можно обойти настройки Execution Policy.Для этого нужно запустить ваш PowerShell файл в отдельном процессе с параметром executionpolicy RemoteSigned или Bypass.
Powershell.exe -noprofile -executionpolicy bypass -file c:\ps\test_script.ps1
Как вы видите, такая команда позволяет запускать PowerShell скрипт и игнорировать текущие настройки политики.
Если вы хотите разрешать запуск любых локальных PowerShell скриптов в Windows, можно задать политику RemoteSigned для области LocalMachine (это менее безопасный способ!):
Set-ExecutionPolicy –ExecutionPolicy RemoteSigned
При отладке и разработке PowerShell скриптов в среде Visual Studio Code, также будет постоянно появляться ошибка “ps1 cannot be loaded because running scripts is disabled on this system” в Visual Studio Code. В качестве обходного решения нужно добавьте следующие настройки в файл settings.json, которые будут запускать скрипт в режиме Bypass (ctrl + shift + p
-> settings.json
):
"terminal.integrated.profiles.windows": { "PowerShell": { "source": "PowerShell", "icon": "terminal-powershell", "args": ["-ExecutionPolicy", "Bypass"] } }, "terminal.integrated.defaultProfile.windows": "PowerShell"
Перезапустите среду VSCode.