Comment créer et exécuter des scripts PowerShell Auto-Signés
- Mise à jour le 24 nov. 2024

Par défaut et pour des raisons de sécurité il n'est pas possible d'exécuter des scripts PowerShell. Évidement, il est possible d'utiliser l'option -ExecutionPolicy Bypass
mais si l'on souhaite améliorer la securité il peut être interessant de savoir comment n'autoriser que les scripts préalablement signés. Nous allons voir ici comment créer et n'autoriser que les scripts signés.
GPO pour autoriser uniquement les scripts signés
- Ouvrir l'éditeur des stratégies de groupe :

- Aller dans Configuration utilisateur > Modèle d'administration > Composants Windows > Windows PowerShell :

- Éditer la stratégie Activer l'exécution des scripts :

Création du certificat
Pour signer nos scripts nous avons besoin d'un certificat. Nous allons voir ici comment en créer un auto-signé.
- Ouvrir une console Windows PowerShell en administrateur :

- Attribuer un nom à notre nouveau certificat dans la variable
$CertificateName
:
PS C:\Users\Administrator\Desktop> $CertificateName = "STD Certificate"
- Définir l'endroit ou l'on souhaite créer le certificat :
PS C:\Users\Administrator\Desktop> $OutPutPFXFilePath = "C:\Users\administrator\Desktop\MyNewSigningCertificate.pfx"
- Définir un mot de passe à notre achive pfx :
PS C:\Users\Administrator\Desktop> $MyStrongPassword = ConvertTo-SecureString -String "MyPassword" -Force -AsPlainText
- Enfin, créer le certificat avec une durée de vie de 10 ans et une taille de clé de 4096 bits :
PS C:\Users\Administrator\Desktop> New-SelfSignedCertificate -subject $CertificateName -Type CodeSigning -NotAfter (Get-Date).AddYears(10) -KeyLength 4096 | Export-PfxCertificate -FilePath $OutPutPFXFilePath -password $MyStrongPassword
Signer le script
- Charger le certificat :
PS C:\Users\Administrator\Desktop> $MyCertFromPfx = Get-PfxCertificate -FilePath 'C:\Users\administrator\Desktop\MyNewSigningCertificate.pfx'
Enter password : ********
- Signer le script :
PS C:\Users\Administrator\Desktop> Set-AuthenticodeSignature -PSPath 'C:\Users\administrator\Desktop\script.ps1' -Certificate $MyCertFromPfx

Importer le Certificat
Pour être correctement reconnu, le certificat auto-signé à besoin d'être importé sur les ordinateurs sur lesquels nous voulons exécuter nos scripts PowerShell. Il faudra donc entrer les commandes suivants avec les droits administrateurs sur les machines cibles.
Définir les variables
- Renseigner le mot de passe de l'archive pfx. et le chemin vers le certificat :
PS C:\Users\Administrator\Desktop> $MyStrongPassword = ConvertTo-SecureString -String "MyPassword" -Force -AsPlainText
PS C:\Users\Administrator\Desktop> $CertPath = "C:\Users\administrator\Desktop\MyNewSigningCertificate.pfx"
Importer vers le magasin Autorités de certification racines de confiance
- Importer le certificat vers le magasin local d'Autoritésde certification racines de confiance :
PS C:\Users\Administrator\Desktop> Import-PfxCertificate -FilePath $CertPath "cert:\LocalMachine\Root" -Password $MyStrongPassword

Importer vers le magasin Éditeurs approuvés
- Importer le certificat vers le magasin local des Éditeurs approuvés :
PS C:\Users\Administrator\Desktop> Import-PfxCertificate -FilePath $CertPath "cert:\LocalMachine\TrustedPublisher" -Password $MyStrongPassword

Vérifier la signature
- Nous pouvons vérifier si le script est correctement signé avec la commande
Get-AuthenticodeSignature
:
PS C:\Users\Administrator\Desktop> Get-AuthenticodeSignature 'C:\Users\administrator\Desktop\script.ps1'

- Si le script a été modifié après avoir été signé, HashMismacth apparaitra et le script ne poura être executé :
