Dela via


Hash för filen matchar inte vid körning av signerat PowerShell-skript

Gäller för: Windows PowerShell

Symptom

Föreställ dig följande scenario:

  • Du har ett PowerShell-skript som innehåller specialtecken som ö, ä eller ü.

  • Du signerar skriptet på en dator som använder ett systemspråk (till exempel en-US).

  • Du kör det signerade skriptet på en dator som använder ett annat systemspråk (till exempel cs-CZ).

  • Skriptet kodas med ASCII eller UTF-8.

I det här scenariot visar PowerShell följande felmeddelande:

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.

Orsak

När du signerar skriptet på en en-US-dator skapar signeringsprocessen den digitala signaturen för umlaut och specialtecken med hjälp av en-US-koden. Om du kör det signerade skriptet på en cs-CZ-dator misslyckas signaturverifieringen eftersom umlaut och specialtecken som ö, ä och ü i ASCII eller UTF-8 kodas på olika sätt på en-US- och cs-CZ-datorer.

Signaturverifieringsprocessen skapar en hash för PowerShell-skriptinnehåll som inte innehåller signaturen. Och de umlaut och specialtecken tolkas annorlunda på cs-CZ och en-US datorer. I den här situationen uppstår ett hashfel.

Åtgärd

Om du vill att ett signerat PowerShell-skript ska köras oberoende av nationella inställningar använder du någon av följande metoder:

  • Ersätt eller ta bort alla umlaut- och specialtecken som ö, ä och ü innan du signerar PowerShell-skript.

  • Använd UTF-16 LE BOM-kodning för PowerShell-skript.

Mer information

Ett exempel (UTF-8-kodat skript med specialtecken "ä") som återskapar problemet finns i följande steg:

  1. Du har en dator med följande inställningar:

    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. På samma dator skapar du ett PowerShell-skript Install.ps1 som innehåller specialtecknet "ä" och signerar skriptet.

    Kommentar

    När du kör det signerade skriptet på samma dator fungerar det utan problem.

  3. Kör samma signerade skript på en dator som använder ett annat systemspråk. Till exempel:

    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)
    

    Skriptet misslyckas med följande meddelanden:

    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  
    

Mer information om PowerShell-skript som är kodade på olika sätt finns i:

ASCII-kodat PowerShell-skript UTF-8-kodat PowerShell-skript UTF-16 BE BOM-kodat PowerShell-skript UTF-16 LE BOM-kodat PowerShell-skript
Windows 10 Påverkas med HASH-matchningsproblem Påverkas med HASH-matchningsproblem n/a (Set-AuthenticodeSignature misslyckas med UnknownError) PÅVERKAS INTE med HASH-matchningsproblem
Windows 11 Påverkas med HASH-matchningsproblem Påverkas med HASH-matchningsproblem n/a (Set-AuthenticodeSignature misslyckas med UnknownError) PÅVERKAS INTE med HASH-matchningsproblem
Windows Server 2019 Påverkas med HASH-matchningsproblem Påverkas med HASH-matchningsproblem n/a (Set-AuthenticodeSignature misslyckas med UnknownError) PÅVERKAS INTE med HASH-matchningsproblem
Windows Server 2022 Påverkas med HASH-matchningsproblem Påverkas med HASH-matchningsproblem n/a (Set-AuthenticodeSignature misslyckas med UnknownError) PÅVERKAS INTE med HASH-matchningsproblem

Datainsamling

Om du behöver hjälp från Microsofts support rekommenderar vi att du samlar in informationen genom att följa stegen i Samla in information med hjälp av TSS för användarupplevelseproblem.