Condividi tramite


L'hash del file non corrisponde quando si esegue uno script di PowerShell firmato

Si applica a: Windows PowerShell

Sintomi

Prendi in considerazione lo scenario seguente:

  • Si dispone di uno script di PowerShell che contiene caratteri speciali come ö, ä o ü.

  • Firmare lo script in un computer che usa impostazioni locali di sistema( ad esempio en-US).

  • Si esegue lo script firmato in un computer che usa un'altra impostazione locale di sistema, ad esempio cs-CSV.

  • Lo script è codificato con ASCII o UTF-8.

In questo scenario PowerShell visualizza il messaggio di errore seguente:

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.

Causa

Quando si firma lo script in un computer en-US, il processo di firma crea la firma digitale per umlaut e caratteri speciali usando il codice en-US. Se si esegue lo script firmato in un computer cs-CSV, la verifica della firma avrà esito negativo perché umlaut e caratteri speciali come ö, ä e ü in ASCII o UTF-8 vengono codificati in modo diverso nei computer en-US e cs-INTEGER.

Il processo di verifica della firma crea un hash per il contenuto dello script di PowerShell che non include la firma. E i caratteri speciali e umlaut vengono interpretati in modo diverso nei computer cs-CSV e en-US. In questo caso, si verificherà una mancata corrispondenza dell'hash.

Risoluzione

Per eseguire uno script di PowerShell firmato in modo indipendente dalle impostazioni locali, usare uno dei metodi seguenti:

  • Sostituire o rimuovere tutti i caratteri speciali e umlaut come ö, ä e ü prima di firmare gli script di PowerShell.

  • Usare la codifica DBA UTF-16 per gli script di PowerShell.

Ulteriori informazioni

Per un esempio (script con codifica UTF-8 con carattere speciale "ä") che riproduce il problema, vedere i passaggi seguenti:

  1. Si dispone di un computer con le impostazioni seguenti:

    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. Nello stesso computer creare uno script di PowerShell Install.ps1 contenente un carattere speciale "ä" e firmare lo script.

    Note

    Quando si esegue lo script firmato nello stesso computer, funziona senza problemi.

  3. Eseguire lo stesso script firmato in un computer che usa un'altra impostazione locale di sistema. Ad esempio:

    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)
    

    Lo script non riesce con i messaggi seguenti:

    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  
    

Per altre informazioni sugli script di PowerShell codificati in modo diverso, vedere:

Script di PowerShell codificato ASCII Script di PowerShell con codifica UTF-8 Script di PowerShell con codifica UTF-16 BE BOM Script powerShell con codifica UTF-16 LE BOM
Windows 10 Problema di mancata corrispondenza hash Problema di mancata corrispondenza hash n/a (Set-AuthenticodeSignature ha esito negativo con UnknownError) NON interessato dal problema di mancata corrispondenza HASH
Windows 11 Problema di mancata corrispondenza hash Problema di mancata corrispondenza hash n/a (Set-AuthenticodeSignature ha esito negativo con UnknownError) NON interessato dal problema di mancata corrispondenza HASH
Windows Server 2019 Problema di mancata corrispondenza hash Problema di mancata corrispondenza hash n/a (Set-AuthenticodeSignature ha esito negativo con UnknownError) NON interessato dal problema di mancata corrispondenza HASH
Windows Server 2022 Problema di mancata corrispondenza hash Problema di mancata corrispondenza hash n/a (Set-AuthenticodeSignature ha esito negativo con UnknownError) NON interessato dal problema di mancata corrispondenza HASH

Raccolta dei dati

Se è necessaria l'assistenza del supporto tecnico Microsoft, si consiglia di raccogliere le informazioni seguendo i passaggi indicati in Raccogliere informazioni utilizzando il TSS per i problemi relativi all'esperienza utente.