Freigeben über


Der Hash der Datei stimmt nicht überein, wenn ein signiertes PowerShell-Skript ausgeführt wird.

Gilt für: Windows PowerShell

Problembeschreibung

Stellen Sie sich folgendes Szenario vor:

  • Sie verfügen über ein PowerShell-Skript, das Sonderzeichen wie ö, ä oder ü enthält.

  • Sie signieren das Skript auf einem Computer, auf dem ein Systemgebietsschema verwendet wird (z. B. en-US).

  • Sie führen das signierte Skript auf einem Computer aus, auf dem ein anderes Systemgebietsschema verwendet wird (z. B. cs-CZ).

  • Das Skript ist mit ASCII oder UTF-8 codiert.

In diesem Szenario zeigt PowerShell die folgende Fehlermeldung an:

The contents of file <FullPathForSignedPowerShellScript> might have been changed by an
unauthorized user or process because the hash of the file does not match the hash stored 
in the digital signature. The script cannot run on the specified system.

Ursache

Wenn Sie das Skript auf einem en-US-Computer signieren, erstellt der Signierungsprozess die digitale Signatur für Umlaute und Sonderzeichen mithilfe des en-US-Codes. Wenn Sie das signierte Skript auf einem CS-CZ-Computer ausführen, schlägt die Signaturüberprüfung fehl, da Umlaute und Sonderzeichen wie ö, ä und ü in ASCII oder UTF-8 auf en-US- und cs-CZ-Computern unterschiedlich codiert werden.

Der Signaturüberprüfungsprozess erstellt einen Hash für PowerShell-Skriptinhalte, die die Signatur nicht enthalten. Und die Umlaute und Sonderzeichen werden auf cs-CZ und en-US-Computern unterschiedlich interpretiert. In dieser Situation tritt ein Hashkonflikt auf.

Lösung

Verwenden Sie eine der folgenden Methoden, um ein signiertes PowerShell-Skript unabhängig von gebietsschemaeinstellungen auszuführen:

  • Ersetzen oder entfernen Sie alle Umlaute und Sonderzeichen wie ö, ä und ü vor dem Signieren von PowerShell-Skripts.

  • Verwenden Sie utf-16 LE BOM-Codierung für PowerShell-Skripts.

Weitere Informationen

Ein Beispiel (UTF-8-codiertes Skript mit Sonderzeichen "ä"), das das Problem reproduziert, finden Sie in den folgenden Schritten:

  1. Sie verfügen über einen Computer mit den folgenden Einstellungen:

    PS C:\Users> get-culture
    
    LCID             Name             DisplayName
    ----             ----             ----------- 
    1033             en-US            English (United States)
    
    PS C:\Users> Get-ExecutionPolicy
    
    AllSigned
    
    PS C:\Users> Get-WinSystemLocale
    
    LCID             Name             DisplayName  
    ----             ----             -----------  
    1033             en-US            English (United States)
    
  2. Erstellen Sie auf demselben Computer ein PowerShell-Skript "Install.ps1 ", das ein Sonderzeichen "ä" enthält, und signieren Sie das Skript.

    Notiz

    Wenn Sie das signierte Skript auf demselben Computer ausführen, funktioniert es ohne Probleme.

  3. Führen Sie dasselbe signierte Skript auf einem Computer aus, auf dem ein anderes Systemgebietsschema verwendet wird. Zum Beispiel:

    PS C:\tmp> Get-Culture
    
    LCID              Name             DisplayName
    ----              ----             -----------
    1033              en-US            English (United States)
    
    PS C:\tmp > Get-ExecutionPolicy
    
    AllSigned
    
    PS C:\tmp > Get-WinSystemLocale
    
    LCID              Name             DisplayName
    ----              ----             -----------
    1029              cs-CZ            Czech (Czech Republic)
    

    Das Skript schlägt mit den folgenden Meldungen fehl:

    File C:\tmp\Install.ps1 cannot be loaded. The contents of file C:\tmp\Install.ps1 might have been
    changed by an unauthorized user or process, because the hash of the file does not match the hash stored in the digital
    signature. The script cannot run on the specified system. For more information, run Get-Help about_Signing..  
    At line:1 char:1  
    + .\Install.ps1  
            + ~~~~~~~~~~~~~  
            + CategoryInfo : SecurityError: (:) [], PSSecurityException  
            + FullyQualifiedErrorId : UnauthorizedAccess  
    

Weitere Informationen zu den PowerShell-Skripts, die unterschiedlich codiert sind, finden Sie unter:

ASCII-codiertes PowerShell-Skript UTF-8-codiertes PowerShell-Skript UTF-16 BE BOM-codiertes PowerShell-Skript UTF-16 LE BOM-codiertes PowerShell-Skript
Windows 10 Betroffenes Problem mit hashkonflikten Betroffenes Problem mit hashkonflikten n/a (Set-AuthenticodeSignature schlägt mit UnknownError fehl) NICHT betroffen mit HASH-Konfliktproblem
Windows 11 Betroffenes Problem mit hashkonflikten Betroffenes Problem mit hashkonflikten n/a (Set-AuthenticodeSignature schlägt mit UnknownError fehl) NICHT betroffen mit HASH-Konfliktproblem
Windows Server 2019 Betroffenes Problem mit hashkonflikten Betroffenes Problem mit hashkonflikten n/a (Set-AuthenticodeSignature schlägt mit UnknownError fehl) NICHT betroffen mit HASH-Konfliktproblem
Windows Server 2022 Betroffenes Problem mit hashkonflikten Betroffenes Problem mit hashkonflikten n/a (Set-AuthenticodeSignature schlägt mit UnknownError fehl) NICHT betroffen mit HASH-Konfliktproblem

Datensammlung

Wenn Sie Unterstützung vom Microsoft-Support benötigen, empfehlen wir Ihnen, die Informationen zu sammeln, indem Sie die Schritte unter Sammeln von Informationen mithilfe von TSS für Fragen der Benutzerfreundlichkeit ausführen.