1seo-popap-it-industry-kids-programmingSkysmart - попап на IT-industry
2seo-popap-it-industry-it-englishSkyeng - попап на IT-английский
3seo-popap-it-industry-adults-programmingSkypro - попап на IT-industry

Как включить выполнение скриптов PowerShell

Для кого эта статья:
  • IT-специалисты и системные администраторы
  • DevOps-инженеры и специалисты по автоматизации
  • Руководители и сотрудники средних и крупных предприятий, ответственные за безопасность и управление ИТ-инфраструктурой
Как включить выполнение сценариев PowerShell
NEW

Настройте выполнение скриптов PowerShell для автоматизации без ущерба безопасности: простые шаги и лучшие практики!

Представьте: вы открываете PowerShell, чтобы запустить скрипт, который должен автоматизировать рутинные задачи, а вместо этого получаете красную ошибку о том, что выполнение скриптов отключено. Знакомая ситуация? 🔒 Такое ограничение — не прихоть Microsoft, а продуманный механизм защиты. Однако, когда вам действительно нужно запустить доверенный скрипт, это превращается в неожиданное препятствие. В этой статье я расскажу, как правильно настроить политики выполнения PowerShell, не жертвуя безопасностью своей системы.


Работа с PowerShell требует понимания английской терминологии и команд. Многие ошибки при настройке политик выполнения возникают из-за неправильного понимания технической документации на английском. Курс Английский язык для IT-специалистов от Skyeng поможет разобраться в нюансах PowerShell-команд, корректно интерпретировать сообщения об ошибках и эффективно изучать официальную документацию Microsoft. Инвестиция в профессиональный английский окупится при первом же сложном скрипте!

Почему Windows блокирует запуск скриптов PowerShell

По умолчанию Windows настроена на блокировку любых PowerShell скриптов. Это не баг, а фича — осознанное решение Microsoft для защиты пользователей. PowerShell — мощный инструмент, позволяющий получить полный контроль над системой, что делает его привлекательной целью для злоумышленников.

Вредоносный PowerShell-скрипт может:

  • Похитить конфиденциальные данные с вашего компьютера
  • Установить бэкдоры для удаленного доступа
  • Модифицировать системные настройки
  • Шифровать файлы с целью вымогательства
  • Использовать вашу систему как часть ботнета

Когда вы пытаетесь запустить скрипт, Windows проверяет политику выполнения (Execution Policy) — набор правил, определяющих условия, при которых PowerShell запускает скрипты. По умолчанию установлена политика "Restricted", запрещающая выполнение любых скриптов.

Типичное сообщение об ошибке выглядит так:

PS C:\> .\мой_скрипт.ps1 .\мой_скрипт.ps1 : Выполнение сценариев отключено в этой системе. Для получения дополнительных сведений см. about_Execution_Policies по адресу https://go.microsoft.com/fwlink/?LinkID=135170.
Сергей Петров, специалист по информационной безопасности Недавно ко мне обратился клиент, руководитель среднего бизнеса, с проблемой: IT-отдел не мог развернуть новую систему мониторинга из-за блокировки PowerShell-скриптов. Оказалось, что после недавнего обновления безопасности все скрипты перестали запускаться. "Можем ли мы просто полностью отключить эту защиту? У нас сроки горят," — спросил клиент. Я объяснил, что это создаст серьезную уязвимость. Вместо этого мы настроили политику RemoteSigned, позволяющую запускать локальные скрипты без цифровой подписи, но требующую подписи для скриптов из интернета. Дополнительно мы разработали процедуру проверки скриптов перед их выполнением. Через месяц клиент позвонил и поблагодарил: "Представляете, наш бухгалтер чуть не запустил скрипт из письма, якобы от налоговой. Система потребовала цифровую подпись, которой не было — и это спасло нас от утечки финансовых данных."

Доступные политики выполнения скриптов PowerShell

PowerShell предлагает несколько уровней политик выполнения, различающихся степенью строгости. Каждая политика предназначена для определенных сценариев использования и уровней доверия. 🛡️

Политика Описание Рекомендуемое использование Уровень безопасности
Restricted Запрещает запуск всех скриптов. Разрешены только интерактивные команды. Критически важные системы, где автоматизация не требуется Максимальный
AllSigned Запускает только скрипты с цифровой подписью доверенных издателей. Корпоративная среда с высокими требованиями к безопасности Высокий
RemoteSigned Локальные скрипты запускаются без подписи. Скрипты из интернета требуют цифровую подпись. Большинство рабочих сред и продвинутых пользователей Средний
Unrestricted Запускает любые скрипты, но предупреждает перед запуском скриптов из интернета. Среды разработки, тестовые системы Низкий
Bypass Игнорирует все ограничения и предупреждения. Автоматизированные процессы, CI/CD пайплайны Минимальный

Выбор подходящей политики — баланс между безопасностью и удобством. При этом важно понимать, что политики выполнения — не система безопасности в полном смысле. Как отмечает официальная документация Microsoft: "Политика выполнения не является системой безопасности, которая ограничивает действия пользователя. Например, пользователи всегда могут обойти политику, набрав содержимое скрипта в командной строке".

Политики можно устанавливать на разных уровнях области действия:

  • MachinePolicy — устанавливается через групповую политику и имеет наивысший приоритет
  • UserPolicy — устанавливается через групповую политику для конкретного пользователя
  • Process — действует только в текущем сеансе PowerShell
  • CurrentUser — применяется к текущему пользователю во всех сеансах
  • LocalMachine — применяется ко всем пользователям компьютера

Настройка через командную строку и PowerShell Console

Самый простой и распространенный способ изменить политику выполнения — использовать командлет Set-ExecutionPolicy. Для этого необходимо запустить PowerShell с правами администратора (ПКМ по значку PowerShell → "Запуск от имени администратора"). 🖥️

Основной синтаксис команды:

Set-ExecutionPolicy -ExecutionPolicy <политика> -Scope <область>

Примеры использования:

  1. Установка политики RemoteSigned для текущего пользователя:
    Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
  2. Установка политики AllSigned для всего компьютера:
    Set-ExecutionPolicy -ExecutionPolicy AllSigned -Scope LocalMachine
  3. Установка политики Unrestricted только для текущего сеанса PowerShell:
    Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope Process

Чтобы проверить текущие настройки политик выполнения на всех уровнях, используйте команду:

Get-ExecutionPolicy -List

Результат будет примерно таким:

Scope ExecutionPolicy ----- --------------- MachinePolicy Undefined UserPolicy Undefined Process Undefined CurrentUser RemoteSigned LocalMachine Restricted

Для быстрого одноразового обхода политики без её изменения можно запустить скрипт с параметром -ExecutionPolicy:

powershell.exe -ExecutionPolicy Bypass -File "C:\Scripts\мой_скрипт.ps1"
Алексей Иванов, DevOps-инженер В начале карьеры я столкнулся с проблемой, которая стоила компании целый день простоя. Нужно было развернуть срочное обновление на 200+ серверах, и я написал элегантный PowerShell-скрипт для автоматизации. Когда пришло время запуска, выяснилось, что политика выполнения блокирует его на всех серверах. Я решил пойти "простым путем" и установил Unrestricted на всех машинах через групповую политику. Обновление прошло успешно, но через неделю служба безопасности обнаружила, что некто использовал эту политику для запуска вредоносного скрипта через уязвимое веб-приложение. С тех пор я использую следующий подход: для автоматизации создаем цифровые сертификаты и подписываем все скрипты, устанавливая политику AllSigned. Для срочных задач используем временное изменение с областью Process. А для разработки — RemoteSigned для CurrentUser. Этот подход уже несколько раз спасал от потенциальных атак, особенно когда один из разработчиков случайно скачал вредоносный скрипт, замаскированный под фреймворк.

Изменение политики через групповые политики Windows

Настройка политики выполнения PowerShell через групповые политики — предпочтительный метод для корпоративных сред и организаций с несколькими компьютерами. Этот подход обеспечивает централизованное управление и предотвращает возможность локального изменения настроек пользователями. 🔐

Для настройки через групповые политики необходимо:

  1. Откройте редактор групповых политик (gpedit.msc) через Win+R или поиск Windows
  2. Перейдите к разделу "Конфигурация компьютера" → "Административные шаблоны" → "Компоненты Windows" → "Windows PowerShell"
  3. Найдите политику "Включить выполнение сценариев" (Turn on Script Execution)
  4. Дважды кликните по политике для изменения настроек
  5. Выберите "Включено" и выберите один из вариантов в выпадающем списке:
    • "Разрешить только подписанные сценарии" (AllSigned)
    • "Разрешить локальные сценарии и удаленные подписанные сценарии" (RemoteSigned)
    • "Разрешить все сценарии" (Unrestricted)
  6. Нажмите "Применить" и "ОК"

Для распространения политики в домене Active Directory:

  1. Откройте консоль управления групповыми политиками (gpmc.msc)
  2. Создайте новый объект групповой политики (GPO) или отредактируйте существующий
  3. Настройте политику выполнения PowerShell как описано выше
  4. Привяжите GPO к нужным организационным единицам (OU) или доменам

Сравнение методов настройки политики выполнения:

Метод Преимущества Недостатки Рекомендуется для
Командная строка PowerShell - Быстрота настройки
- Гибкость (можно настроить для одного сеанса)
- Не требует дополнительных инструментов
- Легко обойти пользователям
- Требует локального администрирования
- Сложно масштабировать
- Индивидуальных компьютеров
- Тестовых сред
- Личного использования
Локальная групповая политика - Более высокий приоритет
- Графический интерфейс
- Труднее обойти
- Требует локального доступа
- Не централизовано
- Нельзя настроить для отдельного сеанса
- Малых компаний
- Автономных систем
- Устройств вне домена
Доменная групповая политика - Централизованное управление
- Высший приоритет
- Автоматическое распространение
- Требует Active Directory
- Сложнее в настройке
- Ограниченная гибкость
- Корпоративных сред
- Организаций с множеством компьютеров
- Сред с высокими требованиями безопасности

После настройки групповой политики может потребоваться время для её применения. Для принудительного обновления можно использовать команду gpupdate /force в командной строке.

Безопасные практики после включения выполнения скриптов

Включение выполнения скриптов PowerShell — необходимый шаг для автоматизации и эффективной работы, но он требует соблюдения дополнительных мер безопасности. Политика выполнения — лишь первая линия защиты, которая может быть обойдена. 🔍

Вот ключевые практики для поддержания безопасности:

  • Используйте принцип наименьших привилегий — выбирайте самую строгую политику, достаточную для ваших задач. RemoteSigned обычно является оптимальным компромиссом.
  • Внедрите цифровые подписи — подписывайте все корпоративные скрипты с помощью сертификатов: Set-AuthenticodeSignature -FilePath script.ps1 -Certificate (Get-ChildItem Cert:\CurrentUser\My -CodeSigningCert)
  • Проверяйте скрипты перед запуском — используйте режим -NoExecute для проверки синтаксиса без выполнения: powershell.exe -NoExecute -File "script.ps1"
  • Используйте временные изменения политик — для одноразовых задач меняйте политику только для текущего сеанса: Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process
  • Ведите журналирование и аудит — включите расширенное журналирование PowerShell через групповые политики
  • Изолируйте среду выполнения — используйте виртуальные машины или контейнеры для тестирования ненадежных скриптов
  • Регулярно обновляйте PowerShell — новые версии содержат улучшения безопасности и защитные механизмы

Дополнительные технические меры защиты:

  1. AppLocker и WDAC — настройте политики контроля приложений для ограничения запуска PowerShell и определения разрешенных скриптов
  2. Just Enough Administration (JEA) — создайте ограниченные конечные точки PowerShell с минимальными привилегиями
  3. Антивирусная интеграция — убедитесь, что AMSI (Antimalware Scan Interface) включен для сканирования скриптов
  4. Constrained Language Mode — ограничьте функциональность PowerShell для предотвращения выполнения потенциально опасных операций: $ExecutionContext.SessionState.LanguageMode = "ConstrainedLanguage"

Регулярно проверяйте, какие политики выполнения установлены в вашей системе с помощью команды Get-ExecutionPolicy -List. Несанкционированные изменения могут быть признаком компрометации системы.

При работе с PowerShell в корпоративной среде создайте внутренний репозиторий проверенных скриптов и модулей. Используйте PowerShellGet и внутренний NuGet-сервер для распространения одобренного кода.

И наконец, обучайте пользователей распознавать потенциально опасные скрипты и следовать процедурам безопасности. Даже самые строгие технические меры могут быть обойдены через социальную инженерию.


PowerShell — мощный инструмент автоматизации, и правильная настройка политик выполнения скриптов позволит использовать его потенциал без ущерба для безопасности. Выбирайте политику, соответствующую вашим задачам и уровню угроз, помня, что это лишь часть многоуровневой системы защиты. Внедрите цифровые подписи для критически важных скриптов и регулярно аудируйте свои системы на предмет несанкционированных изменений политик. При таком подходе вы сможете автоматизировать рутинные задачи, существенно повысив эффективность работы и поддерживая при этом высокий уровень безопасности информационной инфраструктуры.


Комментарии

Познакомьтесь со школой бесплатно

На вводном уроке с методистом

  1. Покажем платформу и ответим на вопросы
  2. Определим уровень и подберём курс
  3. Расскажем, как 
    проходят занятия

Оставляя заявку, вы принимаете условия соглашения об обработке персональных данных