KB5132061 后 PowerShell 签名报错?脚本编码问题的修复办法

装了 KB5132061 后,签名过的 PowerShell 脚本验证失败?多半是 UTF-8 编码被严格校验。小编整理了扫描、转 UTF-8 BOM、重新签名和临时修复的完整步骤。

脚本之前一直好好的,装完 Windows 11 的 KB5132061 之后,签过名的 PowerShell 脚本突然验证失败,甚至 Get-AuthenticodeSignature 直接说“NotSigned”——您是不是正碰上这个?

简单讲:微软在 2026 年 11 月 10 日推送的 KB5132061,把 PowerShell 签名验证和签名时的编码检查变严了。脚本里有不合规的 UTF-8 数据,或者文件编码被系统“读错”了,原来能过的签名就会失败。解决思路也不复杂:先扫描定位,再把脚本转成带 BOM 的 UTF-8,检查内容后重新签名。

如果您还没了解这次更新本身,可以先看小编的另一篇:Windows 11 KB5132061 十一月更新:新功能、修复和下载方法。

KB5132061 PowerShell 签名错误

为什么签名会验证失败

PowerShell 靠数字签名确认脚本没被改过、来源可信。KB5132061 之后,系统在验证和签名时对文本编码要求更严:以前遇到不合规的 UTF-8 数据,Windows 会用替代字符“糊弄过去”,现在不行了。

下面几种脚本最容易中招:

  • 脚本里含有无效的 UTF-8 字节。
  • UTF-8 文件没有字节顺序标记(BOM),被系统按本机代码页去读。
  • 文件本来是 Shift-JIS 之类的编码,却被当成 UTF-8 解析。

要注意,不是所有“签名失败”都是这次更新惹的祸。文件可能真被改过,或者签名证书本身不受信任,所以别急着改编码,先扫描确认。

想了解更新本身可能带来的其他问题,可以看这篇:装完 KB5132061 出问题怎么办?Windows 11 六种排查办法。

常见症状对照

您看到的现象可能说明什么
Get-AuthenticodeSignature 对原本签过名的脚本返回 NotSigned签名验证没通过,可能和编码有关
Set-AuthenticodeSignature 返回 UnknownError签名时的编码检查没通过
提示“No mapping for the Unicode character exists in the target multi-byte code page”字符和目标代码页对不上
启用 App Control for Business 的设备上脚本以 ConstrainedLanguage 模式运行受影响脚本被降级处理

单凭这些现象不能断定就是编码问题,微软建议先扫描受影响的文件,再决定怎么修。

第一步:用微软的修复脚本扫描文件

微软提供了一个名为 Repair-SignedPowerShellUtf8.ps1 的工具,用来识别和修复这类编码问题。请从微软官方支持页面下载脚本,完整保存并命名为 Repair-SignedPowerShellUtf8.ps1。

运行时请在 FullLanguage 会话里启动 Windows PowerShell 5.1,并遵守您所在组织的执行策略和应用控制要求,不要为了跑脚本去关闭安全策略。

修改或替换任何脚本之前,先用 Scan 模式扫描,它只检查、不改动文件。在放着修复工具的目录里打开 PowerShell,运行:

.\Repair-SignedPowerShellUtf8.ps1 -Mode Scan -Path C:\Scripts -Recurse | Format-Table Path, Issue, SignatureStatus, Action -Wrap
扫描 PowerShell 脚本编码问题的命令

把命令里的 C:\Scripts 换成您存放脚本的文件夹。扫描结果会列出可能的编码问题、当前签名状态和建议操作,常见的 Issue 有三类:

  • CodePageTextReadAsUtf8:某种语言的文本(比如 Shift-JIS)被当成 UTF-8 读了。
  • Utf8WithoutBom:没有 BOM 的 UTF-8,可能和系统代码页冲突。
  • MalformedUtf8:按 UTF-8 读取时发现了无效数据。

如果扫描结果是 None,就别只因为状态显示 NotSigned 去硬改编码,转而检查证书和签名本身有没有别的问题。

第二步:把脚本转换成带 BOM 的 UTF-8(推荐)

想一劳永逸,微软的建议是:把受影响的脚本转成合法的、带字节顺序标记(BOM)的 UTF-8,检查内容,然后重新签名。命令如下:

.\Repair-SignedPowerShellUtf8.ps1 -Mode ConvertToUtf8Bom -Path C:\Scripts\Deploy.ps1

把路径换成您那个出问题的脚本。工具不会覆盖原文件,而是另存一份带 .utf8bom.ps1 后缀的副本,并且会把旧签名从副本里去掉。

如果脚本原本用的是特定编码,需要指定源代码页。比如 Shift-JIS 对应代码页 932:

.\Repair-SignedPowerShellUtf8.ps1 -Mode ConvertToUtf8Bom -Path C:\Scripts\Deploy.ps1 -SourceCodePage 932

转换完成后,打开新文件仔细核对命令、特殊字符和注释,确认没有被转坏再继续。

第三步:给转换后的脚本重新签名

假设您信任的签名证书已经放在变量 $cert 里,运行:

Set-AuthenticodeSignature -FilePath C:\Scripts\Deploy.utf8bom.ps1 -Certificate $cert

再验证一下签名:

Get-AuthenticodeSignature -FilePath C:\Scripts\Deploy.utf8bom.ps1 | Format-List Status, StatusMessage

确认状态显示有效(Valid)后,先在测试环境跑一遍,再部署到其他设备。命令的详细说明可以看微软文档:Set-AuthenticodeSignature。

第四步(备选):暂时不重新签名的临时修复

如果一时没法重新签名,微软的工具对部分编码问题提供了临时修复模式:

.\Repair-SignedPowerShellUtf8.ps1 -Mode Repair -Path C:\Scripts\Deploy.ps1

这个模式同样会生成一份单独的副本,并尽量保留原有签名。它只适用于部分编码场景,不保证每次都成功。只有当结果文件的 SignatureStatus 是 Valid,并且您检查、测试过之后,再拿去使用。

小结

这不是 PowerShell 坏了,而是 KB5132061 有意加强了安全校验:对编码不合规或被改动的脚本不再“放行”。碰到问题,按“先扫描、再转 UTF-8 BOM、检查后重新签名”的顺序处理就行。

常见问题(FAQ)

脚本签名失败一定是 KB5132061 导致的吗?

不一定。文件被改过、证书不受信任也会失败,所以请先用 Scan 模式确认是不是编码问题。

修复脚本会直接改掉我的原文件吗?

不会。转换和修复模式都会另存一份副本,原文件不动。

转换成 UTF-8 BOM 后,旧签名还能用吗?

转换时旧签名会从副本里去掉,需要用您信任的证书重新签名。

扫描结果是 None,但还是显示 NotSigned 怎么办?

那就不是编码问题,不要硬改编码,转去检查证书和签名本身。

可以为了跑脚本去关掉执行策略吗?

不建议。请遵守组织的执行策略和应用控制,通过修复脚本解决,而不是关闭安全设置。