Настройка политики запуска скриптов (Execution Policy) PowerShell
По-умолчанию настройки Windows запрещают запуск скриптов PowerShell. Это необходимо для предотвращения запуска вредоносного кода на PowerShell. Настройки политик запуска PowerShell скриптов определяются в Execution Policy. В этой статье мы рассмотрим доступные политики запуска PS скриптов, как изменить Execution Policy и настроить политики использования PowerShell скриптов на компьютерах в домене.
Выполнение PowerShell скриптов запрещено для данной системы
При попытке выполнить PowerShell скрипт (файл с расширением PS1) на чистой Windows 10, появляется ошибка:
Текущее значение политики выполнения скриптов PowerShell на компьютере можно получить командой:
Доступны следующие значения PowerShell Execution Policy:
Как разрешить запуск скриптов PowerShell с помощью Execution Policy?
Чтобы изменить текущее значение политики запуска PowerShell скриптов, используется командлет Set-ExecutionPolicy.
Например, разрешим запуск локальных скриптов:
Подтвердите изменение политики запуска PS1 скриптов, нажав Y или A.
Чтобы запрос не появлялся, можно использовать параметр Force.
Set-ExecutionPolicy RemoteSigned –Force
Если вы установили значение политики PowerShell Execution Policy в Unrestricted, то при запуске удаленных скриптов из сетевых каталогов по UNC пути, скачанных из интернета файлов, все равно будет появляться предупреждение:
Также следует различать различные области действия политик выполнения скриптов PowerShell (scopes):
Область применения политики можно указать с помощью параметр Scope командлета Set-ExecutionPolicy. Например:
Проверим текущие настройки ExecutionPolicy для всех областей:
Значение политики выполнения, которые вы задаете с помощью командлета Set-ExecutionPolicy для областей CurrentUser и LocalMachine, хранятся в реестре. Например, выполните командлет:
Откройте ветку реестра 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 вы не сможете изменить настройки политики выполнения скриптов вручную. При попытке изменить настройки Execution Policy на компьютере, на который применяется такая GPO, появится ошибка:
Способы обхода политики PowerShell Execution
Есть несколько трюков, которые могут помочь вам, когда нужно запустить на компьютере PowerShell скрипт, не изменяя настройки политики выполнения. Например, я хочу запустить простой PS1 скрипт, который поверяет, что запущен с правами администратора.
Можно с помощью Get-Content получить содержимое скрипта и перенаправить его в стандартныq поток ввода консоли PS.
Windows 7: Как разрешить выполнение скриптов PowerShell?
Представьте себе ситуацию: вы скачиваете из Интернета скрипт и пытаетесь его запустить. Но если вы ранее не настроили PowerShell, то вместо работы скрипта вы видите раздражающее сообщение об ошибке, написанное красным шрифтом. Эту проблему можно легко решить.
PowerShell обладает рядом режимов исполнения, которые определяют, какой тип кода разрешается выполнять. Все это управляется ключом реестра, живущим в HKLM. Существует 4 различных режима исполнения:
Ограниченный (Restricted): Политика исполнения по умолчанию, не допускает работу скриптов и разрешает работу лишь интерактивных команд.
Все подписанные (All Signed): Допускает работу всех скриптов. Правда, все скрипты и файлы конфигурации должны быть подписаны издателем, которому вы доверяете; данный режим подвергает вас риску работы подписанных (но вредоносных) скриптов, после получения подтверждения доверия издателю.
Удаленные подписанные (Remote Signed): Локальные скрипты работают без подписи. Все скачанные скрипты должны иметь цифровую подпись.
Неограниченный (Unrestricted): Все скрипты и файлы конфигурации, полученные из коммуникационных приложений, вроде Microsoft Outlook, Internet Explorer, Outlook Express и Windows Messenger работают после подтверждения, что вы понимаете, что файл исходит из Интернета; никакие цифровые подписи не требуются; данный режим подвергает вас риску работу неподписанных, вредоносных скриптов.
По умолчанию для PowerShell используется режим «Ограниченный». В этом режиме, PowerShell работает лишь как интерактивная оболочка. Он не допускает работу скриптов, и загружает лишь те файлы конфигурации, которые подписаны издателем, которому вы доверяете.
Если вы получаете раздражающую красную ошибку, то, в большинстве случаев, ее появление связано именно с тем, что вы пытаетесь запустить неподписанный скрипт. Самым безопасным способом решения этой проблемы является – изменение политики исполнения на неограниченную, запуск скрипта, и затем обратный возврат к ограниченной политике.
Для изменения политики исполнения на неограниченную, запустите нижеследующую команду в административном PowerShell:
Вы увидите запрос подтверждения. Нажмите Enter.
Теперь вы можете запустить скачанный скрипт. Однако, вы подвергаете себя серьезному риску, так что по окончании работы скрипта, не забудьте вернуть политику исполнения назад в ограниченный режим. Сделать это можно с помощью следующей команды:
И снова вы увидите запрос подтверждения. Нажмите Enter.
Powershell выполнение неподписанных скриптов
Всем привет сегодня хочу рассказать как запустить скрипт PowerShell в Windows. Представьте ситуацию вы написали скрипт который сильно упрощает вам вывод информации по Active Directory, вы открываете оснастку powershell прописываете путь к своему скрипту нажимаете enter и получаете ошибку.
Смотрим как ее решить.
Ошибки при запуске скрипта PowerShell
Как запустить скрипт PowerShell в Windows-02
Так же вы можете увидеть ошибку после запуска установленного PowerCLI:
+ CategoryInfo : Ошибка безопасности: (:) [Import-Module], PSSecurityException
+ FullyQualifiedErrorId : UnauthorizedAccess,Microsoft.PowerShell.Commands.ImportModuleCommand
PowerShell обладает рядом режимов исполнения, которые определяют, какой тип кода разрешается выполнять. Все это управляется ключом реестра, живущим в HKLM. Существует 4 различных режима исполнения:
По умолчанию для PowerShell используется режим «Ограниченный». В этом режиме, PowerShell работает лишь как интерактивная оболочка. Он не допускает работу скриптов, и загружает лишь те файлы конфигурации, которые подписаны издателем, которому вы доверяете.
Разрешить выполнение скриптов powershell
Чтобы запускать созданные собою скрипты, необходимо разрешить выполнение ненадежных скриптов с помощью команды Set-ExecutionPolicy remotesigned и подтверждением (Внимание. для выполнения этой команды необходимо запустить PowerShell с правами администратора). После этого можно вновь запустить выполнения скрипта.
Как запустить скрипт PowerShell в Windows-03
На вопрос жмем Y, для разрешения выполнения скриптов. После этих манипуляций вы сможете запустить ваш скрипт. То же самое я проделал и для PowerCLI, что в результате дало возможность теперь его запускать без проблем.
Как запустить скрипт PowerShell по расписанию
Очень часто на серверах появляется необходимость по запуску скрипта PowerShell по расписанию или по определенному событию, которое появляется в логах Windows, в таких ситуациях нам на помощь приходит планировщик заданий.
Я приведу пример, когда мне нужно было отслеживать события ID 20291 или ID 11707. И так откройте окно выполнить и введите в нем:
Далее вы щелкаете по библиотеке правым кликом и из контекстного меню выбираете пункт «Создать задачу«.
Задаете имя задания, советую запускать скрипт PowerShell от имени учетной записи «СИСТЕМА (SYSTEM)«, это будет гарантировать, что задание точно отработает.
Поставьте галку «Выполнять с наивысшими правами»
Переходим на вкладку тригеры и создаем новый. В параметрах выберите «При событии«
Тут тригер будет срабатывать, когда в логах появится событие 11707.
В действие оставляем «Запуск программы». В программе указываем powershell, а в параметрах задайте путь до самого скрипта, через параметр -File c:\scripts\id11707.ps1.
В итоге у меня вышло вот так.
Как видим, мое задание по запуску скрипта PowerShell успешно создано и отработало в планировщике Windows.
Запуск скрипта PowerShell через исполняемый файл exe
Так же вы можете воспользоваться конвертированием скрипта PowerShell из формата ps1 в exe файл, после чего даже не потребуется менять политику запуска не подписанных скриптов. Так же exe скрипт можете запускать и через планировщик.
about_Signing
Краткое описание
Описывает, как подписывать сценарии, чтобы они соответствовали политикам выполнения PowerShell.
Подробное описание
Политика ограниченного выполнения не позволяет запускать скрипты. Политики выполнения AllSigned и RemoteSigned запрещают PowerShell выполнять сценарии, не имеющие цифровой подписи.
В этом разделе объясняется, как выполнить выбранные сценарии, которые не подписаны, даже если политика выполнения RemoteSigned и как подписывать сценарии для собственного использования.
Дополнительные сведения о политиках выполнения PowerShell см. в разделе about_Execution_Policies.
Разрешение выполнения подписанных сценариев
При первом запуске PowerShell на компьютере, скорее всего, действует политика ограниченного выполнения (по умолчанию).
Политика с ограниченным доступом не позволяет запускать скрипты.
Чтобы найти действующую политику выполнения на компьютере, введите:
Чтобы запустить неподписанные скрипты, написанные на локальном компьютере и подписанные скрипты от других пользователей, запустите PowerShell с параметром Запуск от имени администратора, а затем используйте следующую команду, чтобы изменить политику выполнения на компьютере на RemoteSigned:
Дополнительные сведения см. в разделе справки по Set-ExecutionPolicy командлету.
Выполнение неподписанных скриптов с помощью политики выполнения RemoteSigned
Если политика выполнения PowerShell — RemoteSigned, PowerShell не будет запускать неподписанные сценарии, которые будут скачаны из Интернета, в том числе неподписанные сценарии, получаемые через электронную почту и программы обмена мгновенными сообщениями.
При попытке запустить скачанный скрипт PowerShell выводит следующее сообщение об ошибке:
Перед выполнением скрипта проверьте код, чтобы убедиться, что он является доверенным. Сценарии имеют тот же результат, что и любая исполняемая программа.
Чтобы выполнить неподписанный скрипт, используйте командлет Unblock-File или выполните следующую процедуру.
Если сценарий, скачанный из Интернета, имеет цифровую подпись, но вы еще не выбрали доверие к издателю, PowerShell выводит следующее сообщение:
Если вы доверяете издателю, выберите «запустить один раз» или «всегда запускать». Если вы не доверяете издателю, выберите параметр «никогда не запускать» или «не запускать». Если выбрать параметр «никогда не запускать» или «всегда запускать», PowerShell не будет выводить запрос для этого издателя снова.
Методы подписания скриптов
Вы можете подписывать скрипты, которые вы пишете, и скрипты, получаемые из других источников. Перед тем как подписать любой сценарий, проверьте каждую команду, чтобы убедиться в том, что он является надежным для выполнения.
Рекомендации по подписывания кода см. в статье рекомендации по подписываниякода.
Дополнительные сведения о том, как подписать файл скрипта, см. в разделе Set-AuthenticodeSignature.
New-SelfSignedCertificate Командлет, представленный в модуле PKI в PowerShell 3,0, создает самозаверяющий сертификат, подходящий для тестирования. Дополнительные сведения см. в разделе справки по командлету New-SelfSignedCertificate.
Чтобы добавить цифровую подпись в скрипт, необходимо подписать его с помощью сертификата подписи кода. Для подписи файла скрипта подходят два типа сертификатов:
Сертификаты, созданные центром сертификации. для платной платы общедоступный центр сертификации проверяет ваше удостоверение и предоставляет сертификат подписи кода. при приобретении сертификата от известного центра сертификации можно предоставить общий доступ к сценарию пользователям на других компьютерах, на которых выполняется Windows, так как эти компьютеры доверяют центру сертификации.
Создаваемые сертификаты: можно создать самозаверяющий сертификат, для которого компьютер является центром сертификации, который создает сертификат. Этот сертификат предоставляется бесплатно и позволяет писать, подписывать и выполнять сценарии на компьютере. Однако сценарий, подписанный самозаверяющим сертификатом, не будет выполняться на других компьютерах.
Как правило, самозаверяющий сертификат используется только для подписывания сценариев, написанных для собственного использования, и для подписывания сценариев, получаемых из других источников, которые были проверены как надежные. Он не подходит для сценариев, которые будут совместно использоваться даже в рамках предприятия.
При создании самозаверяющего сертификата обязательно включите усиленную защиту закрытого ключа в сертификате. Это не позволит вредоносным программам подписывать сценарии от вашего имени. Инструкции включены в конце этого раздела.
Создание самозаверяющего сертификата.
Чтобы создать самозаверяющий сертификат, используйте командлет New-SelfSignedCertificate в модуле PKI. этот модуль появился в PowerShell 3,0 и входит в Windows 8 и Windows Server 2012. Дополнительные сведения см. в разделе справки по New-SelfSignedCertificate командлету.
Использование Makecert.exe
Дополнительные сведения о синтаксисе и описаниях параметров MakeCert.exe средства см. в разделе средство создания сертификатов (MakeCert.exe).
Чтобы использовать MakeCert.exe средство для создания сертификата, выполните следующие команды в окне командной строки пакета SDK.
Первая команда создает локальный центр сертификации для компьютера. Вторая команда создает личный сертификат из центра сертификации. Вы можете скопировать или ввести команды в том виде, в каком они отображаются. Подстановки не требуются, хотя имя сертификата можно изменить.
MakeCert.exe Средство предложит ввести пароль закрытого ключа. Пароль гарантирует, что никто не сможет использовать сертификат или получить к нему доступ без вашего согласия. Создайте и введите пароль, который вы можете запомнить. Этот пароль будет использоваться позже для получения сертификата.
Чтобы убедиться, что сертификат создан правильно, выполните следующую команду, чтобы получить сертификат в хранилище сертификатов на компьютере. Файл сертификата не будет найден в каталоге файловой системы.
В командной строке PowerShell введите следующее:
Эта команда использует поставщик сертификата PowerShell для просмотра сведений о сертификате.
Подписать сценарий
Следующий пример скрипта Add-Signature.ps1 подписывает скрипт. Однако при использовании политики выполнения AllSigned необходимо подписать Add-Signature.ps1 сценарий перед запуском.
Скрипт должен быть сохранен с использованием кодировки ASCII или UTF8NoBOM. Вы можете подписать файл сценария, который использует другую кодировку. Но сценарий не запускается, или модуль, содержащий скрипт, не удается импортировать.
Чтобы подписать Add-Signature.ps1 файл скрипта, введите в командной строке PowerShell следующие команды:
После подписания скрипта его можно запустить на локальном компьютере. Однако сценарий не будет выполняться на компьютерах, на которых политика выполнения PowerShell требует наличия цифровой подписи от доверенного центра сертификации. При попытке PowerShell отобразится следующее сообщение об ошибке:
Если PowerShell отображает это сообщение при выполнении скрипта, который не был написан, обработайте файл так, как если бы вы ни использовали любой неподписанный сценарий. Проверьте код, чтобы определить, можно ли доверять сценарию.
Включение усиленной защиты закрытого ключа для сертификата
При наличии частного сертификата на компьютере вредоносные программы могут подписывать сценарии от вашего имени, что позволяет PowerShell выполнять их.
Чтобы экспортировать сертификат, выполните следующие действия.
Чтобы повторно импортировать сертификат, выполните следующие действия.
Запрет истечения срока действия подписи
Цифровая подпись в скрипте действительна до истечения срока действия сертификата подписи или до тех пор, пока сервер отметок времени не сможет проверить, подписан ли сценарий, пока сертификат для подписи был действителен.
Так как большинство сертификатов подписи действительны только в течение одного года, использование сервера отметок времени гарантирует, что пользователи смогут использовать ваш сценарий в течение многих лет.
about_Execution_Policies
Краткое описание
Описывает политики выполнения PowerShell и способы управления ими.
Подробное описание
Политика выполнения PowerShell — это функция безопасности, которая управляет условиями, при которых PowerShell загружает файлы конфигурации и запускает сценарии. Эта функция помогает предотвратить выполнение вредоносных сценариев.
на Windows компьютере можно задать политику выполнения для локального компьютера, для текущего пользователя или для конкретного сеанса. Можно также использовать параметр групповой политики, чтобы задать политики выполнения для компьютеров и пользователей.
Политики выполнения для локального компьютера и текущего пользователя хранятся в реестре. В профиле PowerShell не нужно задавать политики выполнения. Политика выполнения для определенного сеанса сохраняется только в памяти и теряется при закрытии сеанса.
Политика выполнения не является системой безопасности, которая ограничивают действия пользователя. Например, пользователи могут без труда обходить политику, вводя содержимое скрипта в командной строке, если не удается выполнить сценарий. Вместо этого политика выполнения помогает пользователям задавать основные правила и запрещает их непреднамеренное нарушение.
Политики выполнения PowerShell
Ниже перечислены политики выполнения PowerShell.
AllSigned
Bypass
Default
RemoteSigned
Restricted
Undefined
Unrestricted
Область политики выполнения
Можно задать политику выполнения, действующую только в определенной области.
Scope Значения перечислены в порядке приоритета. Политика, которая имеет приоритет, вступает в силу в текущем сеансе, даже если более ограничивающая политика была установлена на более низком уровне приоритета.
Дополнительные сведения см. в разделе Set-ExecutionPolicy.
MachinePolicy
Задается групповая политика для всех пользователей компьютера.
UserPolicy
Задается групповая политика для текущего пользователя компьютера.
Process
CurrentUser
LocalMachine
Управление политикой выполнения с помощью PowerShell
Чтобы получить действующую политику выполнения для текущего сеанса PowerShell, используйте Get-ExecutionPolicy командлет.
Следующая команда получает действующую политику выполнения:
Чтобы получить все политики выполнения, влияющие на текущий сеанс, и отобразить их в порядке очередности:
Результат выглядит примерно так, как показано в следующем примере:
Например, следующая команда возвращает политику выполнения для области CurrentUser :
Изменение политики выполнения
чтобы изменить политику выполнения PowerShell на Windows компьютере, используйте Set-ExecutionPolicy командлет. Изменение вступает в силу немедленно. Вам не нужно перезапускать PowerShell.
Если задать политику выполнения для областей LocalMachine или CurrentUser, это изменение будет сохранено в реестре и останется эффективным, пока вы не измените его.
Если задать политику выполнения для Process области, она не будет сохранена в реестре. Политика выполнения сохраняется до закрытия текущего процесса и любых дочерних процессов.
Чтобы изменить политику выполнения, выполните следующие действия.
Чтобы задать политику выполнения в определенной области, выполните следующие действия.
Команда для изменения политики выполнения может быть выполнена, но не будет изменена действующая политика выполнения.
Например, команда, которая задает политику выполнения для локального компьютера, может быть выполнена, но переопределена политикой выполнения для текущего пользователя.
Удаление политики выполнения
Например, чтобы удалить политику выполнения для всех пользователей локального компьютера, выполните следующие действия.
Чтобы удалить политику выполнения для Scope :
если в какой-либо области не задана политика выполнения, действующая политика выполнения — это значение Restricted по умолчанию для клиентов Windows.
Задание другой политики для одного сеанса
Параметр ExecutionPolicy параметра можно использовать powershell.exe для установки политики выполнения для нового сеанса PowerShell. Политика влияет только на текущий сеанс и дочерние сеансы.
Чтобы задать политику выполнения для нового сеанса, запустите PowerShell из командной строки, например cmd.exe или из PowerShell, а затем используйте параметр ExecutionPolicy из powershell.exe для установки политики выполнения.
Во время сеанса политика выполнения, заданная для сеанса, имеет приоритет над политикой выполнения, заданной в реестре для локального компьютера или текущего пользователя. Однако он не имеет приоритета над политикой выполнения, заданной с помощью групповая политика.
Использование групповая политика для управления политикой выполнения
Включить параметры политики выполнения сценария следующим образом:
Если отключить выполнение скрипта, скрипты не будут выполняться. Это эквивалентно Restricted политике выполнения.
Если включить выполнение скрипта, можно выбрать политику выполнения. Параметры групповая политика эквивалентны следующим параметрам политики выполнения.
| Групповая политика | Политика выполнения |
|---|---|
| Разрешить все скрипты | Unrestricted |
| Разрешить локальные скрипты и удаленные подписанные скрипты | RemoteSigned |
| Разрешить только подписанные скрипты | AllSigned |
Если параметр включить выполнение скрипта не настроен, он не будет действовать. Политика выполнения, заданная в PowerShell, вступает в силу.
Файлы Повершеллексекутионполици. adm и Повершеллексекутионполици. ADMX добавляют политику выполнения сценария включения в узлы Конфигурация компьютера и Конфигурация пользователя в групповая политика Editor по следующим путям.
для Windows XP и Windows Server 2003:
Administrative Templates\Windows Components\Windows PowerShell
для Windows Vista и более поздних версий Windows:
Administrative Templates\Classic Administrative Templates\Windows Components\Windows PowerShell
Политики, заданные в узле Конфигурация компьютера, имеют приоритет над политиками, заданными в узле Конфигурация пользователя.
Дополнительные сведения см. на веб-сайте about_Group_Policy_Settings.
Приоритет политики выполнения
При определении действующей политики выполнения для сеанса PowerShell оценивает политики выполнения в следующем порядке очередности.
Управление подписанными и неподписанными скриптами
в Windows такие программы, как Internet Explorer и Microsoft Edge, добавляют альтернативный поток данных к загруженным файлам. Этот файл помечается как «поступающий из Интернета». Если политика выполнения PowerShell — RemoteSigned, PowerShell не будет запускать неподписанные сценарии, которые загружаются из Интернета, в том числе программы электронной почты и обмена мгновенными сообщениями.
Вы можете подписать сценарий или выбрать Запуск неподписанного скрипта без изменения политики выполнения.
Начиная с версии PowerShell 3,0 можно использовать параметр Stream Get-Item командлета для обнаружения заблокированных файлов, так как они были загружены из Интернета. Используйте Unblock-File командлет, чтобы разблокировать скрипты, чтобы их можно было запускать в PowerShell.
Дополнительные сведения см. в разделе about_Signing, Get-Itemи Unblock-File.
Другие методы загрузки файлов могут не помечать файлы как поступающие из зоны Интернета. Некоторые примеры:
политика выполнения в Windows server Core и windows Nano server
когда PowerShell 5,1 запускается на Windows server Core или Windows Nano server при определенных условиях, политики выполнения могут завершиться со следующей ошибкой:
PowerShell использует интерфейсы api в оболочке Windows Desktop Shell ( explorer.exe ) для проверки зоны файла скрипта. оболочка Windows недоступна в Windows server Core и Windows Nano server.
эту ошибку также можно получить на любой Windows системе, если оболочка Windows Desktop Shell недоступна или не отвечает. например, во время входа сценарий входа PowerShell может начать выполнение до того, как Windows рабочий стол будет готов, что приведет к сбою.
При использовании политики выполнения обхода или AllSigned не требуется проверка зоны, которая позволяет избежать проблемы.





















