2026年11月の Windows 11 セキュリティ更新プログラムをインストールした後、これまで正常だった署名済み PowerShell スクリプトが、NotSigned と判定される場合があります。
これは、Microsoft が 2026年11月10日のセキュリティ更新から導入した、PowerShell スクリプトの署名検証に関するセキュリティ強化が原因となっている可能性があります。
この問題は、Microsoft 公式の Repair-SignedPowerShellUtf8.ps1 を使用して診断し、影響を受けたスクリプトを修復できる場合があります。
実際に Hyper-V の仮想マシンで検証したところ、更新前は正常だった署名が、更新後に NotSigned へ変化する現象を確認しました。さらに、Microsoft 公式ツールで原因を特定し、再署名せずに Valid へ戻すことにも成功しています。
この記事では、実際の検証結果と、Microsoft が案内している診断・修復方法を紹介します。
2026年11月の Windows Update で PowerShell の署名検証が厳格化
Microsoft は 2026年11月10日、サポート情報「KB5135999」を公開し、Windows のセキュリティ更新プログラムによる PowerShell スクリプトの署名検証の変更について説明しました。
この変更では、スクリプトのテキストを読み取る際のエンコード検証が厳格化され、不正な形式の UTF-8 データが含まれている場合、署名の検証に失敗する可能性があります。
以前は不正な文字を置換して処理できていたスクリプトでも、更新後は不正なエンコードとして拒否される場合があります。
この変更は意図的なセキュリティ強化であり、Microsoft が不具合として扱っているものではありません。
発生する可能性がある症状
Microsoft は、次のような症状を案内しています。
| 操作・機能 | 発生する可能性がある症状 |
|---|---|
Get-AuthenticodeSignature | 以前は有効だった署名が NotSigned と判定される |
Set-AuthenticodeSignature | UnknownError が発生する |
| Windows Defender Application Control(WDAC) | 影響を受けたスクリプトが制限付き言語モードで実行される場合がある |
ただし、NotSigned や UnknownError は、証明書の信頼状態や署名後のファイル変更など、別の原因でも発生します。
そのため、エラーが表示されたという理由だけで、今回の更新が原因だと判断することはできません。
【検証結果】KB5132061 適用後に署名が NotSigned へ変化
今回、Hyper-V の仮想マシンを使用し、2026年10月28日公開のプレビュー更新プログラム KB5127936 と、11 月のセキュリティ更新プログラム KB5132061 の環境で署名検証を比較しました。
検証には Windows PowerShell 5.1 を使用し、次の 2つのファイルを用意しました。
ValidUtf8.ps1:正常な UTF-8 で保存したスクリプトMalformedUtf8.ps1:不正な UTF-8 データを含むスクリプト
両方のファイルにテスト用証明書で署名し、証明書を信頼済みにした状態で比較しています。
更新前:両方とも Valid と判定
KB5127936 をインストールした環境では、両方のスクリプトで署名検証に成功しました。
| ファイル | 署名検証結果 |
|---|---|
| ValidUtf8.ps1 | Valid |
| MalformedUtf8.ps1 | Valid |
不正な UTF-8 を含むファイルでも、署名は有効と判定されています。
更新後:不正な UTF-8 のみ NotSigned に変化
続いて、同じ仮想マシンに KB5132061 をインストールして再起動し、署名済みファイルを変更せずに再度検証しました。
結果は次のとおりです。
| ファイル | 更新前 | 更新後 |
|---|---|---|
| ValidUtf8.ps1 | Valid | Valid |
| MalformedUtf8.ps1 | Valid | NotSigned |
正常な UTF-8 のスクリプトには変化がありませんでしたが、不正な UTF-8 を含むスクリプトだけが NotSigned に変化しました。
実際に Get-AuthenticodeSignature を実行すると、次の結果が表示されました。
正常なスクリプト:
Status : Valid
StatusMessage : 署名を確認しました。
不正な UTF-8 を含むスクリプト:
Status : NotSigned
StatusMessage : ファイル E:\PowerShellEncodingTest\MalformedUtf8.ps1 はデジタル署名されていません。
この結果は、Microsoft が KB5135999 で説明している、エンコード検証の厳格化によって既存の署名が検証できなくなる現象と一致しています。
なお、今回確認したのは検証用に用意したスクリプトでの現象です。すべての署名済み PowerShell スクリプトが影響を受けるわけではありません。
Microsoft 公式ツールで署名エラーの原因を診断する方法
Microsoft は、署名検証に影響するエンコードの問題を調べるため、Repair-SignedPowerShellUtf8.ps1 という診断・修復用スクリプトを公開しています。
このツールには、次の 3つのモードがあります。
| モード | 機能 |
|---|---|
Scan | エンコードの問題と署名状態を調査する |
Repair | 既存の署名を維持したまま一時的な修復を試みる |
ConvertToUtf8Bom | UTF-8 with BOM に変換し、再署名用のファイルを作成する |
まずは、ファイルを変更しない Scan モードで原因を確認します。
手順 1:Microsoft 公式ツールを保存する
Microsoft の公式ページを開きます。
Microsoft 公式:Sample PowerShell script to repair script-signature encoding issues(KB5136213)
ページ内に掲載されている Repair-SignedPowerShellUtf8.ps1 のコード全体をコピーし、同じ名前で保存します。
ここでは例として、C:\Scripts に保存したものとして説明します。
※このツールは Windows PowerShell 5.1 の FullLanguage モードで使用します。実行ポリシーによって起動できない場合がありますが、組織で管理されている PC では、管理者の承認を得ずに実行制限を変更しないでください。
手順 2:影響を受けるスクリプトをスキャンする
Windows PowerShell 5.1 を開き、次のコマンドで保存先のフォルダーへ移動します。
cd C:\Scripts
続いて、診断対象のスクリプトを指定します。
.\Repair-SignedPowerShellUtf8.ps1 -Mode Scan -Path "C:\Scripts\Deploy.ps1" |
Format-List Path, Issue, SignatureStatus, Action
C:\Scripts\Deploy.ps1 は例です。実際には、問題が発生しているスクリプトのパスに変更してください。
また、フォルダー内の複数のスクリプトをまとめて調査する場合は、次のように実行できます。
.\Repair-SignedPowerShellUtf8.ps1 -Mode Scan -Path C:\Scripts -Recurse |
Format-Table Path, Issue, SignatureStatus, Action -Wrap
-Recurse は、サブフォルダーも含めて調査するためのオプションです。
手順 3:診断結果を確認する
今回の検証環境では、不正な UTF-8 を含むスクリプトに対して、次の結果が表示されました。
Path : E:\PowerShellEncodingTest\MalformedUtf8.ps1
Issue : MalformedUtf8
SignatureStatus : NotSigned
Action : Temporary: -Mode Repair. Long-term: -Mode ConvertToUtf8Bom and re-sign.
Issue : MalformedUtf8 は、不正な UTF-8 データが検出されたことを示しています。
一方、正常なスクリプトでは次のように表示されました。
Issue : None
SignatureStatus : Valid
Action : No action needed.
Issue に表示される主な判定は、次のとおりです。
| 判定 | 意味 |
|---|---|
MalformedUtf8 | 不正な UTF-8 データが含まれている可能性 |
Utf8WithoutBom | BOM なし UTF-8 とシステムのコードページの組み合わせによる問題 |
CodePageTextReadAsUtf8 | Shift-JIS などのテキストが UTF-8 と誤認された可能性 |
NotValidInCodePage | 選択されたコードページでも UTF-8 でも正常に読み取れない |
None | このスキャンではエンコードの問題を検出しなかった |
Issue : None の場合、NotSigned と表示されているだけでエンコード修復を実行しないでください。
Microsoft 公式ツールで署名を修復する方法
スキャンによってエンコードの問題が確認された場合は、原因に応じて修復方法を選択します。
Microsoft は長期的な対処として UTF-8 with BOM への変換と再署名を推奨していますが、既存の署名を維持したまま修復できる場合もあります。
方法 1:再署名せずに修復を試みる
今回の検証で成功した方法です。
問題のあるスクリプトに対して、次のコマンドを実行します。
.\Repair-SignedPowerShellUtf8.ps1 -Mode Repair -Path "C:\Scripts\Deploy.ps1"
このモードでは元のファイルを変更せず、別名の修復済みファイルを作成します。
今回の検証では、次の結果が得られました。
SourcePath : E:\PowerShellEncodingTest\MalformedUtf8.ps1
RepairedPath : E:\PowerShellEncodingTest\MalformedUtf8.repaired.ps1
Issue : MalformedUtf8
CodePage : 65001
SignatureStatus : Valid
修復後のファイルは、MalformedUtf8.repaired.ps1 という名前で作成されました。
SignatureStatus : Valid と表示されており、既存の署名を維持したまま検証に成功したことがわかります。
さらに、PowerShell の標準コマンドでも確認しました。
Get-AuthenticodeSignature "E:\PowerShellEncodingTest\MalformedUtf8.repaired.ps1" |
Format-List Status, StatusMessage
結果:
Status : Valid
StatusMessage : 署名を確認しました。
今回の検証では、KB5132061 をアンインストールせず、再署名も行わずに、署名検証を Valid に戻すことができました。
ただし、この修復方法はすべてのエンコード問題に対応しているわけではありません。特に、Shift-JIS などが UTF-8 と誤認されたケースでは、次の変換・再署名が必要です。
方法 2:UTF-8 with BOM に変換して再署名する
一時的な修復ができない場合や、長期的に問題を解消したい場合は、ファイルのエンコードを変換して再署名します。
次のコマンドを実行すると、元のファイルとは別に UTF-8 with BOM のコピーが作成されます。
.\Repair-SignedPowerShellUtf8.ps1 -Mode ConvertToUtf8Bom -Path "C:\Scripts\Deploy.ps1"
既定では、Deploy.utf8bom.ps1 という名前で保存されます。
Shift-JIS で保存されたファイルなど、元のエンコードが判明している場合は、必要に応じて -SourceCodePage を指定します。
例えば、コードページ 932 の場合は次のとおりです。
.\Repair-SignedPowerShellUtf8.ps1 -Mode ConvertToUtf8Bom -Path "C:\Scripts\Deploy.ps1" -SourceCodePage 932
変換後は、文字化けやスクリプトの内容に問題がないか確認してください。
このモードでは既存の署名が削除されるため、変換後のファイルを使用するには再署名が必要です。
再署名には、正規のコード署名証明書と、適切な署名権限が必要です。
今回の検証では、ConvertToUtf8Bom モードによる変換に成功し、変換後のスクリプトが正常に実行できることも確認しました。
ただし、不正な UTF-8 データは Unicode の置換文字(U+FFFD)に置き換えられており、元の文字が復元されたわけではありません。
また、変換後のスクリプトに対する再署名は実施していません。
修復する際の注意点
今回の問題に対処する際は、次の点に注意してください。
- 署名エラーがすべてエンコードによるものとは限りません。 証明書の信頼状態や有効期限、署名後のファイル変更なども確認してください。
Repairモードの成功は保証されません。 正常に修復できない場合は、元のエンコードを確認して変換・再署名します。Validと判定されても、スクリプトの正常動作が保証されるわけではありません。 修復したコピーの内容を確認し、動作テストを行ってから使用してください。- BOM を追加するだけでは、不正な UTF-8 データそのものは修正されません。 必要に応じて文字データの修正と再署名を行います。
- 組織で管理されている PC では、実行ポリシーやアプリ制御の制限を無断で解除しないでください。 Microsoft も承認済みの手順でツールを実行するよう案内しています。
また、第三者が配布している署名済みスクリプトを自分で修復できない場合は、発行元に修正版の提供を依頼してください。
修復・変換後のスクリプトが実行できるか検証
Microsoft 公式ツールの Repair モードと ConvertToUtf8Bom モードで作成したスクリプトについて、実際に実行できるか確認しました。
今回の検証では、両方のスクリプトとも正常に実行され、Encoding test と表示されました。
ただし、実行時には現在の PowerShell プロセスに限定して実行ポリシーを Bypass に変更しています。そのため、署名の検証が必須となる環境での実行までは確認していません。
まとめ
2026年11月の Windows セキュリティ更新では、PowerShell スクリプトの署名検証が厳格化されました。
今回の検証では、KB5127936 環境で Valid だった不正な UTF-8 を含む署名済みスクリプトが、KB5132061 適用後に NotSigned と判定される現象を確認しました。
さらに、Microsoft 公式の Repair-SignedPowerShellUtf8.ps1 でエンコードの問題を検出し、Repair モードで再署名せずに署名検証を正常な状態へ戻すことにも成功しました。
同様の症状が発生した場合は、まず公式ツールの Scan モードで原因を調査し、診断結果に応じて修復または変換・再署名を行ってください。




コメント