Microsoft выпустила ноябрьские обновления «Вторника патчей» (Patch Tuesday) с исправлениями безопасности и улучшениями Windows 11. Однако одно из изменений осталось почти незамеченным: оно может создать проблемы пользователям и администраторам, которые запускают скрипты PowerShell. С недавним выходом PowerShell 7.7 оно не связано. Изменение направлено на повышение безопасности, но может потребовать дополнительных действий.
Подписи скриптов перестают проходить проверку
Согласно примечаниям к выпуску KB5132061, Microsoft ужесточила проверку кодировки текста при подписании скриптов PowerShell и проверке их подписей. В результате некоторые старые скрипты, которые раньше успешно проходили проверку, теперь могут ее не пройти: Windows отклонит подписи файлов с некорректной кодировкой текста.
В первую очередь это затронет скрипты с ошибками в кодировке, особенно с некорректными последовательностями UTF-8. До обновления Windows могла принимать некоторые недопустимые символы, заменяя их при декодировании. Теперь система явно отклоняет некорректные последовательности UTF-8, из-за чего подписи тех же скриптов больше не проходят проверку.
Например, команда Get-AuthenticodeSignature для затронутого скрипта может вернуть статус NotSigned, хотя файл ранее был подписан. Попытка подписать проблемный файл с помощью Set-AuthenticodeSignature также может завершиться ошибкой.
Как исправить затронутые скрипты
Microsoft уже опубликовала документ поддержки с рекомендациями. Компания советует сохранить скрипты в корректной кодировке UTF-8 с маркером порядка байтов (BOM), проверить их содержимое и подписать заново.
Для пакетной обработки Microsoft также выпустила инструмент восстановления скриптов PowerShell. Он проверяет файлы на возможные проблемы с кодировкой и пытается исправить их, сохранив существующие подписи. Исходные файлы инструмент не перезаписывает, однако Microsoft предупреждает, что автоматически восстановить удастся не каждый скрипт.
Изменение касается не только Windows 11. Рекомендации Microsoft также распространяются на Windows 10 Enterprise LTSC 2021 и несколько версий Windows Server, включая Windows Server 2025.
Если за последние сутки некоторые старые скрипты перестали запускаться, причиной может быть именно это изменение. Восстановить их работу могут помочь предложенные Microsoft способы.
Наши наблюдения
Мы проверили изменение на тестовом ПК с Windows 11 Pro, версия 26H2 в Windows PowerShell 5.1. До установки KB5132061 (сборка 26300.9818) подписали тестовым сертификатом два скрипта в UTF-8 с BOM: обычный и такой же, но с одним недопустимым байтом в комментарии. Оба получили статус Valid и запускались в режиме политики выполнения AllSigned.
После обновления до сборки 26300.9974 обычный скрипт остался Valid, а скрипт с недопустимым байтом получил статус NotSigned. Подписать его заново тем же сертификатом не удалось: Set-AuthenticodeSignature вернул UnknownError с сообщением «Символ Юникода не имеет сопоставления в конечной многобайтовой кодовой странице». При этом в режиме AllSigned скрипт со статусом NotSigned на нашем тестовом ПК по-прежнему запускался, а контрольный неподписанный файл блокировался.
Инструмент Repair-SignedPowerShellUtf8.ps1 Microsoft опубликовала текстом на странице поддержки, отдельного файла для загрузки нет. Он работает в Windows PowerShell 5.1, а в режиме AllSigned его самого нужно подписать. Режим Scan определил у проблемного скрипта ошибку MalformedUtf8. Режим Repair создал копию, в которой недопустимый байт заменен символом замены, и прежняя подпись копии снова прошла проверку. Режим ConvertToUtf8Bom создал копию без подписи, которая после повторного подписания получила статус Valid. Исходные файлы инструмент не изменил.






