Гид по технологиям

Как подписать PowerShell-скрипт и устранить ошибку «скрипт не подписан»

5 min read PowerShell Обновлено 04 Dec 2025
Подписать PowerShell-скрипт и убрать ошибку «не подписан»
Подписать PowerShell-скрипт и убрать ошибку «не подписан»

Введение

Если вы пытались запустить PowerShell-скрипт без цифровой подписи, скорее всего, видели сообщение об ошибке вида: PowerShell Script file is not digitally signed. You cannot run this script on the current system.

Windows PowerShell — это оболочка и среда автоматизации от Microsoft. По умолчанию Execution Policy часто установлена в значение, блокирующее запуск неподписанных скриптов (например, Restricted или RemoteSigned). Это защитная мера против запуска вредоносного кода. В этой статье описаны безопасные подходы к решению проблемы, варианты на одном компьютере и в корпоративной среде, а также рекомендации по безопасности.

Что означает digital signature для PowerShell в одном предложении

Цифровая подпись гарантирует целостность и происхождение скрипта: издатель и содержимое проверяются при запуске.

Быстрые решения (пошагово)

1. Проверка и изменение Execution Policy

  1. Нажмите клавишу Windows, введите powershell и выберите “Запуск от имени администратора” (Run as administrator).

    Окно выбора

  2. Проверьте текущую политику исполнений командой:

    Get-ExecutionPolicy

  3. Если значение — Restricted, можно изменить его на Unrestricted командой:

    Set-ExecutionPolicy -ExecutionPolicy Unrestricted

    Команда изменения Execution Policy в PowerShell

  4. Подтвердите выбор нажатием Y и клавиши Enter.

Важно: установка Unrestricted снимает многие защиты. Используйте на личной машине для тестирования, но избегайте в продуктивной среде без дополнительных мер контроля.

2. Обход политики только для текущей сессии

  1. Нажмите Windows + X и выберите “Windows PowerShell (Администратор)”.

    Контекстное меню Windows с запуском PowerShell от администратора

  2. Введите команду, которая изменит политику только для текущего процесса:

    Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass

    Команда установки политики Bypass для процесса PowerShell

  3. После закрытия окна PowerShell настройки вернутся к прежним.

Преимущество: безопасно для одноразового запуска — глобальные настройки не меняются.

3. Разблокировать загруженный файл

  1. Откройте PowerShell от имени администратора.

  2. Выполните команду с указанием пути к файлу:

    Unblock-File -Path C:\Downloads\script1.ps1

    Команда Unblock-File в PowerShell

  3. Запустите скрипт заново.

Примечание: если Execution Policy установлена в RemoteSigned, скрипты, загруженные из интернета, требуют подписи. Разблокировка снимает признак «загруженный из интернета» для конкретного файла.

4. Обновите PowerShell

  1. В PowerShell проверьте версию командой:

    $PSVersionTable.PSVersion

    Вывод версии PowerShell в переменной $PSVersionTable.PSVersion

  2. Проверьте актуальную версию на официальном репозитории (GitHub) и скачайте установщик, если ваша версия устарела.

  3. Запустите установщик и следуйте инструкциям.

Обновление полезно, если проблема связана с багами старой версии или требованием новых функциональностей.

5. Разрешить исполнение скриптов через Group Policy

  1. Нажмите Windows + R, введите gpedit.msc и нажмите Enter.

    Окно Run с вводом gpedit.msc

  2. Перейдите: Компьютерная конфигурация → Административные шаблоны → Компоненты Windows → Windows PowerShell.

    Параметры Windows PowerShell в редакторе групповой политики

  3. Найдите параметр “Включить выполнение сценариев” (Turn on Script Execution) и откройте его.

    Параметр включения выполнения скриптов в групповой политике

  4. Выберите “Включено” и в опциях установите “Разрешить все скрипты” (Allow all scripts).

    Опция разрешить все скрипты в редакторе групповой политики

  5. Сохраните изменения.

Этот метод подходит для управления политиками на уровне домена или компьютера в организации.

Когда описанные методы не помогут

  • Скрипт действительно подписан, но подпись недействительна или издатель не доверен — тогда PowerShell продолжит блокировать выполнение.
  • Скрипт был изменён после подписания — подпись потеряет силу.
  • Ограничения на уровне корпоративного антивируса или централизованного управления могут блокировать даже локально разрешённые скрипты.

В этих случаях проверьте подпись командой Get-AuthenticodeSignature <путь_к_файлу> и проанализируйте поле Status.

Как правильно подписать скрипт (обзор)

Коротко: для подписи нужен сертификат с возможностью цифровой подписи кода (Code Signing). Сертификат можно получить у доверенного центра сертификации (CA) или сгенерировать внутренний сертификат в PKI для тестирования.

Мини-методология:

  1. Получите сертификат для подписи кода (официальный CA или внутренний CA).

  2. Установите сертификат в хранилище личных сертификатов пользователя/компьютера.

  3. Подпишите скрипт командой:

    Set-AuthenticodeSignature -FilePath .\script.ps1 -Certificate (Get-ChildItem Cert:\CurrentUser\My -CodeSigningCert)

  4. Проверьте подпись: Get-AuthenticodeSignature .\script.ps1.

Важно: для использования в нескольких машинах используйте сертификат, доверенный на всех целевых машинах (через Group Policy или доверенные корневые центры).

Модель принятия решения (когда что выбирать)

  • Разовый локальный запуск: используйте Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass или Unblock-File.
  • Регулярные скрипты администратора на отдельных машинах: подпишите скрипты с внутренним сертификатом и добавьте доверие к CA.
  • Корпоративная развертка: управляйте через Group Policy и используйте удостоверяющий центр организации или коммерческий CA.
flowchart TD
  A[Нужен запуск скрипта?] --> B{Тест/один раз}
  B -- Да --> C[Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass]
  B -- Нет --> D{В производстве?}
  D -- Да --> E[Подписать скрипт от доверенного CA и настроить GPO]
  D -- Нет --> F[Unblock-File или временная смена ExecutionPolicy]

Критерии приёмки

  • Скрипт выполняется без ошибки «не подписан».
  • Если подпись применена — Get-AuthenticodeSignature показывает Valid/OK статус.
  • Изменения политик задокументированы и согласованы с политиками безопасности организации.

Чек-лист по ролям

Администратор:

  • Проверить Execution Policy (Get-ExecutionPolicy).
  • Решить: временный обход или постоянное решение.
  • При необходимости настроить Group Policy.

Разработчик скриптов:

  • Подписать релизные версии скриптов.
  • Хранить ключи подписи в безопасном хранилище.

Оконечный пользователь:

  • При сомнениях не менять глобальную политику без согласования.
  • Разблокировать только файлы из надёжных источников.

Глоссарий (одной строкой)

  • Execution Policy — настройка PowerShell, ограничивающая запуск скриптов.
  • RemoteSigned — политика, требующая подписи для скриптов, полученных из сети.
  • Authenticode — механизм подписи кода в Windows.

Безопасность и конфиденциальность

  • Никогда не меняйте политику на Unrestricted в продуктивной среде без аудита.
  • Подписывайте скрипты от имени доверенного издателя и храните приватные ключи в безопасных хранилищах (HSM, Azure Key Vault и т.п.).
  • Разблокируйте файл только если вы доверяете источнику; скачанные из интернета скрипты могут содержать вредоносные команды.

Примеры отказа и альтернативные подходы

  • Отказ: корпоративный антивирус удаляет или блокирует скрипт — решение: добавить исключение после проверки безопасности или упаковать логику в управляемое приложение.
  • Альтернатива: перенести автоматизацию в контролируемые среды (Azure Automation, Ansible, SCCM), где выполнение сценариев централизованно управляется.

Резюме

Вы можете решить ошибку “скрипт не подписан” простыми временными обходами (Unblock-File, Bypass), но для безопасной и повторяемой работы в организации лучше подписывать скрипты и управлять политиками через Group Policy. Всегда проверяйте подпись с помощью Get-AuthenticodeSignature и действуйте в рамках политики безопасности вашей организации.

Важно: при любых сомнениях обратитесь к администратору безопасности перед изменением системных политик.

Если наша статья помогла, напишите в комментариях, какой метод сработал для вас.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Скриншот всей веб‑страницы: три метода
Руководство

Скриншот всей веб‑страницы: три метода

Отключить Phone Linking в Windows 10
Windows

Отключить Phone Linking в Windows 10

Сброс сетевых настроек iPhone — вернуть по умолчанию
iPhone

Сброс сетевых настроек iPhone — вернуть по умолчанию

Ошибка ERROR_PWD_TOO_SHORT: как исправить
Windows

Ошибка ERROR_PWD_TOO_SHORT: как исправить

Исправить ошибку IE 11 res://aaResources.dll/104
Техника

Исправить ошибку IE 11 res://aaResources.dll/104

Как отключить "Ответить всем" в Outlook
Outlook

Как отключить "Ответить всем" в Outlook