- Настройка политики запуска скриптов (Execution Policy) PowerShell
- Выполнение PowerShell скриптов запрещено для данной системы
- Как разрешить запуск скриптов PowerShell с помощью Execution Policy?
- Настройка PowerShell Execution Policy с помощью групповых политик
- Способы обхода политики PowerShell Execution
- cscript
- Syntax
- Parameters
- Remarks
- cscript cscript
- Синтаксис Syntax
- Параметры Parameters
- Комментарии Remarks
Настройка политики запуска скриптов (Execution Policy) PowerShell
По-умолчанию настройки Windows запрещают запуск скриптов PowerShell. Это необходимо для предотвращения запуска вредоносного кода на PowerShell. Настройки политик запуска PowerShell скриптов определяются в Execution Policy. В этой статье мы рассмотрим доступные политики запуска PS скриптов, как изменить Execution Policy и настроить политики использования PowerShell скриптов на компьютерах в домене.
Выполнение PowerShell скриптов запрещено для данной системы
При попытке выполнить PowerShell скрипт (файл с расширением PS1) на чистой Windows 10, появляется ошибка:
Текущее значение политики выполнения скриптов PowerShell на компьютере можно получить командой:
Доступны следующие значения PowerShell Execution Policy:
- Restricted – запрещен запуск скриптов PowerShell, можно выполнять только интерактивные команды в консоли;
- AllSigned – разрешено выполнять только подписанные PS скрипты с цифровой подписью от доверенного издателя (можно подписать скрипт самоподписанным сертификатом и добавить его в доверенные). При запуске недоверенных скриптов появляется предупреждение:
- RemoteSigned – можно запускать локальные PowerShell скрипты без ограничения. Можно запускать удаленные PS файлы с цифровой подписью (нельзя запустить PS1 файлы, скачанные из Интернета, запущенные из сетевой папки по UNC пути и т.д.);
- Unrestricted – разрешен запуск всех PowerShell скриптов;
Как разрешить запуск скриптов PowerShell с помощью Execution Policy?
Чтобы изменить текущее значение политики запуска PowerShell скриптов, используется командлет Set-ExecutionPolicy.
Например, разрешим запуск локальных скриптов:
Подтвердите изменение политики запуска PS1 скриптов, нажав Y или A.
Чтобы запрос не появлялся, можно использовать параметр Force.
Set-ExecutionPolicy RemoteSigned –Force
Если вы установили значение политики PowerShell Execution Policy в Unrestricted, то при запуске удаленных скриптов из сетевых каталогов по UNC пути, скачанных из интернета файлов, все равно будет появляться предупреждение:
Также следует различать различные области действия политик выполнения скриптов 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 для всех областей:
Значение политики выполнения, которые вы задаете с помощью командлета Set-ExecutionPolicy для областей CurrentUser и LocalMachine, хранятся в реестре. Например, выполните командлет:
Set-ExecutionPolicy -Scope LocalMachine -ExecutionPolicy Restricted –Force
Откройте ветку реестра HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell и проверьте значение REG_SZ параметра ExecutionPolicy. Оно изменилось на Restricted (допустимые значения параметра Restricted, AllSigned, RemoteSigned, Bypass, Unrestricted и Undefined).
Аналогичные настройки для области CurrentUser находятся в разделе реестра пользователя HKEY_CURRENT_USER\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell.
Отметим, что чаще всего в корпоративной среде используется ExecutionPolicy со значением AllSigned на уровне LocalMachine. Это обеспечивает максимальный баланс между безопасностью и удобством. Для личного пользования на компьютере можно использовать RemoteSigned. Ну а Bypass политику лучше использовать только для запуска отдельных задач (например для запуска скриптов через GPO или заданий планировщика).
Настройка PowerShell Execution Policy с помощью групповых политик
Вы можете настроить политику выполнения PowerShel скриптов на серверах или компьютерах домена с помощью групповых политик.
- С помощью редактора доменных GPO (gpmc.msc) создайте новую GPO (или отредактируйте) существующую и назначьте ее на OU с компьютерами, к которым нужно применить политику запуска PowerShell скриптов;
- В редакторе политики перейдите в раздел Computer Configuration -> Policies -> Administrative Templates -> Windows Components -> Windows PowerShell и найдите политику Turn on Script Execution (Включить выполнение сценариев);
После настройки политики выполнения через GPO вы не сможете изменить настройки политики выполнения скриптов вручную. При попытке изменить настройки Execution Policy на компьютере, на который применяется такая GPO, появится ошибка:
Способы обхода политики PowerShell Execution
Есть несколько трюков, которые могут помочь вам, когда нужно запустить на компьютере PowerShell скрипт, не изменяя настройки политики выполнения. Например, я хочу запустить простой PS1 скрипт, который поверяет, что запущен с правами администратора.
Можно с помощью Get-Content получить содержимое скрипта и перенаправить его в стандартныq поток ввода консоли PS.
cscript
Applies to: Windows Server (Semi-Annual Channel), Windows Server 2019, Windows Server 2016, Windows Server 2012 R2, Windows Server 2012
Starts a script to run in a command-line environment.
Performing this task does not require you to have administrative credentials. Therefore, as a security best practice, consider performing this task as a user without administrative credentials.
Syntax
Parameters
Parameter Description scriptname.extension Specifies the path and file name of the script file with optional file name extension. /b Specifies batch mode, which does not display alerts, scripting errors, or input prompts. /d Starts the debugger. /e: Specifies the engine that is used to run the script. /h:cscript Registers cscript.exe as the default script host for running scripts. /h:wscript Registers wscript.exe as the default script host for running scripts. This is the default. /i Specifies interactive mode, which displays alerts, scripting errors, and input prompts. This is the default and the opposite of /b . /job: Runs the job identified by identifier in a .wsf script file. /logo Specifies that the Windows Script Host banner is displayed in the console before the script runs. This is the default and the opposite of /nologo . /nologo Specifies that the Windows Script Host banner is not displayed before the script runs. /s Saves the current command-prompt options for the current user. /t: Specifies the maximum time the script can run (in seconds). You can specify up to 32,767 seconds. The default is no time limit. /u Specifies Unicode for input and output that is redirected from the console. /x Starts the script in the debugger. /? Displays available command parameters and provides help for using them. This is the same as typing cscript.exe with no parameters and no script. scriptarguments Specifies the arguments passed to the script. Each script argument must be preceded by a slash (/). Remarks
Each parameter is optional; however, you can’t specify script arguments without specifying a script. If you don’t specify a script or any script arguments, cscript.exe displays the cscript.exe syntax and the valid host options.
The /t parameter prevents excessive running of scripts by setting a timer. When the run time exceeds the specified value, cscript interrupts the script engine and ends the process.
Windows script files usually have one of the following file name extensions: .wsf, .vbs, .js. Windows Script Host can use .wsf script files. Each .wsf file can use multiple scripting engines and perform multiple jobs.
cscript cscript
Область применения: Windows Server (половина ежегодного канала), Windows Server 2019, Windows Server 2016, Windows Server 2012 R2, Windows Server 2012 Applies to: Windows Server (Semi-Annual Channel), Windows Server 2019, Windows Server 2016, Windows Server 2012 R2, Windows Server 2012
Запускает сценарий для запуска в среде командной строки. Starts a script to run in a command-line environment.
Для выполнения этой задачи не требуются административные учетные данные. Performing this task does not require you to have administrative credentials. Поэтому рекомендуется выполнять эту задачу от имени пользователя без административных учетных данных. Therefore, as a security best practice, consider performing this task as a user without administrative credentials.
Синтаксис Syntax
Параметры Parameters
Параметр Parameter Описание Description имя_сценария. расширение scriptname.extension Указывает путь и имя файла скрипта с необязательным расширением имени файла. Specifies the path and file name of the script file with optional file name extension. /b /b Задает пакетный режим, при котором не отображаются предупреждения, ошибки сценариев или входные запросы. Specifies batch mode, which does not display alerts, scripting errors, or input prompts. /d /d Запускает отладчик. Starts the debugger. /e: /e: Указывает подсистему, используемую для выполнения скрипта. Specifies the engine that is used to run the script. /h: cscript /h:cscript Регистрирует cscript.exe в качестве сервера скриптов по умолчанию для выполнения скриптов. Registers cscript.exe as the default script host for running scripts. /h: WScript /h:wscript Регистрирует wscript.exe в качестве сервера скриптов по умолчанию для выполнения скриптов. Registers wscript.exe as the default script host for running scripts. Это значение по умолчанию. This is the default. /i /i Указывает интерактивный режим, который отображает предупреждения, ошибки сценариев и входные запросы. Specifies interactive mode, which displays alerts, scripting errors, and input prompts. Это значение по умолчанию и противоположное /b . This is the default and the opposite of /b . /Задание /job: Запускает задание, определяемое идентификатором в файле скрипта. wsf. Runs the job identified by identifier in a .wsf script file. /лого /logo Указывает, что баннер сервера сценариев Windows отображается в консоли перед запуском скрипта. Specifies that the Windows Script Host banner is displayed in the console before the script runs. Это значение по умолчанию и противоположное /nologo . This is the default and the opposite of /nologo . /nologo /nologo Указывает, что баннер сервера сценариев Windows не отображается перед выполнением скрипта. Specifies that the Windows Script Host banner is not displayed before the script runs. /s /s Сохраняет текущие параметры командной строки для текущего пользователя. Saves the current command-prompt options for the current user. /t: /t: Указывает максимальное время, в течение которого может выполняться скрипт (в секундах). Specifies the maximum time the script can run (in seconds). Можно указать до 32 767 секунд. You can specify up to 32,767 seconds. Значение по умолчанию — без ограничения по времени. The default is no time limit. /U /u Указывает Юникод для входных и выходных данных, которые перенаправляются из консоли. Specifies Unicode for input and output that is redirected from the console. /x /x Запускает скрипт в отладчике. Starts the script in the debugger. /? /? Отображает доступные параметры команды и предоставляет справку по их использованию. Displays available command parameters and provides help for using them. Это то же самое, что ввод cscript.exe без параметров и скрипта. This is the same as typing cscript.exe with no parameters and no script. скриптаргументс scriptarguments Задает аргументы, передаваемые в скрипт. Specifies the arguments passed to the script. Каждому аргументу сценария должна предшествовать косая черта ( / ). Each script argument must be preceded by a slash (/). Комментарии Remarks
Каждый параметр является необязательным; Однако нельзя указать аргументы скрипта без указания скрипта. Each parameter is optional; however, you can’t specify script arguments without specifying a script. Если не указать скрипт или какие-либо аргументы скрипта, cscript.exe отображает синтаксис cscript.exe и допустимые параметры узла. If you don’t specify a script or any script arguments, cscript.exe displays the cscript.exe syntax and the valid host options.
Параметр /t предотвращает чрезмерное выполнение скриптов путем установки таймера. The /t parameter prevents excessive running of scripts by setting a timer. Когда время выполнения превышает указанное значение, cscript прерывает работу обработчика скриптов и завершает процесс. When the run time exceeds the specified value, cscript interrupts the script engine and ends the process.
Файлы сценариев Windows обычно имеют одно из следующих расширений имен файлов:. wsf,. vbs,. js. Windows script files usually have one of the following file name extensions: .wsf, .vbs, .js. Сервер сценариев Windows может использовать файлы скриптов. wsf. Windows Script Host can use .wsf script files. Каждый файл. WSF может использовать несколько обработчиков скриптов и выполнять несколько заданий. Each .wsf file can use multiple scripting engines and perform multiple jobs.