Partager via


Le hachage du fichier ne correspond pas lors de l’exécution du script PowerShell signé

S’applique à : Windows PowerShell

Symptômes

Examinez le cas suivant :

  • Vous disposez d’un script PowerShell qui contient des caractères spéciaux tels que ö, ä ou ü.

  • Vous signez le script sur un ordinateur qui utilise des paramètres régionaux système (par exemple, en-US).

  • Vous exécutez le script signé sur un ordinateur qui utilise d’autres paramètres régionaux système (par exemple, cs-CZ).

  • Le script est encodé avec ASCII ou UTF-8.

Dans ce scénario, PowerShell affiche le message d’erreur suivant :

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.

Cause

Lorsque vous signez le script sur un ordinateur en-US, le processus de signature crée la signature numérique pour umlaut et des caractères spéciaux à l’aide du code en-US. Si vous exécutez le script signé sur un ordinateur cs-CZ, la vérification de la signature échoue car les caractères umlaut et spéciaux tels que ö, ä et ü dans ASCII ou UTF-8 sont encodés différemment sur les ordinateurs en-US et cs-CZ.

Le processus de vérification de signature crée un hachage pour le contenu du script PowerShell qui n’inclut pas la signature. Et les caractères umlaut et spéciaux sont interprétés différemment sur les ordinateurs cs-CZ et en-US. Dans ce cas, une incompatibilité de hachage se produit.

Résolution

Pour exécuter un script PowerShell signé indépendamment des paramètres régionaux, utilisez l’une des méthodes suivantes :

  • Remplacez ou supprimez tous les caractères umlaut et spéciaux tels que ö, ä et ü avant de signer des scripts PowerShell.

  • Utilisez l’encodage BOM UTF-16 LE pour les scripts PowerShell.

Plus d’informations

Pour obtenir un exemple (script encodé en UTF-8 avec un caractère spécial « ä ») qui reproduit le problème, consultez les étapes suivantes :

  1. Vous disposez d’un ordinateur qui a les paramètres suivants :

    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. Sur le même ordinateur, créez un script PowerShell Install.ps1 qui contient un caractère spécial « ä » et signez le script.

    Note

    Lorsque vous exécutez le script signé sur le même ordinateur, il fonctionne sans problème.

  3. Exécutez le même script signé sur un ordinateur qui utilise d’autres paramètres régionaux système. Par exemple :

    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)
    

    Le script échoue avec les messages suivants :

    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  
    

Pour plus d’informations sur les scripts PowerShell encodés différemment, consultez :

Script PowerShell encodé ASCII Script PowerShell encodé en UTF-8 Script PowerShell encodé en UTF-16 BE Script PowerShell codé en UTF-16 LE BOM
Windows 10 Problème d’incompatibilité HASH affecté Problème d’incompatibilité HASH affecté n/a (Set-AuthenticodeSignature échoue avec UnknownError) Non affecté par le problème de non-correspondance HASH
Windows 11 Problème d’incompatibilité HASH affecté Problème d’incompatibilité HASH affecté n/a (Set-AuthenticodeSignature échoue avec UnknownError) Non affecté par le problème de non-correspondance HASH
Windows Server 2019 Problème d’incompatibilité HASH affecté Problème d’incompatibilité HASH affecté n/a (Set-AuthenticodeSignature échoue avec UnknownError) Non affecté par le problème de non-correspondance HASH
Windows Server 2022 Problème d’incompatibilité HASH affecté Problème d’incompatibilité HASH affecté n/a (Set-AuthenticodeSignature échoue avec UnknownError) Non affecté par le problème de non-correspondance HASH

Collecte de données

Si vous avez besoin de l’aide du support Microsoft, nous vous recommandons de collecter les informations en suivant les étapes mentionnées dans Collecter des informations à l’aide de TSS pour les problèmes liés à l’expérience utilisateur.