Как подписать 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
Нажмите клавишу Windows, введите
powershellи выберите “Запуск от имени администратора” (Run as administrator).
Проверьте текущую политику исполнений командой:
Get-ExecutionPolicyЕсли значение —
Restricted, можно изменить его наUnrestrictedкомандой:Set-ExecutionPolicy -ExecutionPolicy Unrestricted
Подтвердите выбор нажатием
Yи клавиши Enter.
Важно: установка Unrestricted снимает многие защиты. Используйте на личной машине для тестирования, но избегайте в продуктивной среде без дополнительных мер контроля.
2. Обход политики только для текущей сессии
Нажмите Windows + X и выберите “Windows PowerShell (Администратор)”.

Введите команду, которая изменит политику только для текущего процесса:
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
После закрытия окна PowerShell настройки вернутся к прежним.
Преимущество: безопасно для одноразового запуска — глобальные настройки не меняются.
3. Разблокировать загруженный файл
Откройте PowerShell от имени администратора.
Выполните команду с указанием пути к файлу:
Unblock-File -Path C:\Downloads\script1.ps1
Запустите скрипт заново.
Примечание: если Execution Policy установлена в RemoteSigned, скрипты, загруженные из интернета, требуют подписи. Разблокировка снимает признак «загруженный из интернета» для конкретного файла.
4. Обновите PowerShell
В PowerShell проверьте версию командой:
$PSVersionTable.PSVersion
Проверьте актуальную версию на официальном репозитории (GitHub) и скачайте установщик, если ваша версия устарела.
Запустите установщик и следуйте инструкциям.
Обновление полезно, если проблема связана с багами старой версии или требованием новых функциональностей.
5. Разрешить исполнение скриптов через Group Policy
Нажмите Windows + R, введите
gpedit.mscи нажмите Enter.
Перейдите: Компьютерная конфигурация → Административные шаблоны → Компоненты Windows → Windows PowerShell.

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

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

Сохраните изменения.
Этот метод подходит для управления политиками на уровне домена или компьютера в организации.
Когда описанные методы не помогут
- Скрипт действительно подписан, но подпись недействительна или издатель не доверен — тогда PowerShell продолжит блокировать выполнение.
- Скрипт был изменён после подписания — подпись потеряет силу.
- Ограничения на уровне корпоративного антивируса или централизованного управления могут блокировать даже локально разрешённые скрипты.
В этих случаях проверьте подпись командой Get-AuthenticodeSignature <путь_к_файлу> и проанализируйте поле Status.
Как правильно подписать скрипт (обзор)
Коротко: для подписи нужен сертификат с возможностью цифровой подписи кода (Code Signing). Сертификат можно получить у доверенного центра сертификации (CA) или сгенерировать внутренний сертификат в PKI для тестирования.
Мини-методология:
Получите сертификат для подписи кода (официальный CA или внутренний CA).
Установите сертификат в хранилище личных сертификатов пользователя/компьютера.
Подпишите скрипт командой:
Set-AuthenticodeSignature -FilePath .\script.ps1 -Certificate (Get-ChildItem Cert:\CurrentUser\My -CodeSigningCert)Проверьте подпись:
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 и действуйте в рамках политики безопасности вашей организации.
Важно: при любых сомнениях обратитесь к администратору безопасности перед изменением системных политик.
Если наша статья помогла, напишите в комментариях, какой метод сработал для вас.
Похожие материалы
Скриншот всей веб‑страницы: три метода
Отключить Phone Linking в Windows 10
Сброс сетевых настроек iPhone — вернуть по умолчанию
Ошибка ERROR_PWD_TOO_SHORT: как исправить
Исправить ошибку IE 11 res://aaResources.dll/104