Recherche…


Remarques

La signature d'un script fera en sorte que vos scripts soient conformes à toutes les stratégies d'exécution dans PowerShell et garantissent l'intégrité d'un script. Les scripts signés ne seront pas exécutés s'ils ont été modifiés après leur signature.

La signature de scripts nécessite un certificat de signature de code. Recommandations:

  • Scripts / tests personnels (non partagés): Certificat d'une autorité de certification certifiée (interne ou tierce partie) OU un certificat auto-signé.
  • Organisation interne partagée: Certificat de l'autorité de certification certifiée (interne ou tierce)
  • Organisation externe partagée: Certificat émanant d'une autorité de certification tierce de confiance

En savoir plus sur about_Signing @ TechNet

Politiques d'exécution

PowerShell dispose de stratégies d'exécution configurables qui contrôlent les conditions requises pour l'exécution d'un script ou d'une configuration. Une politique d'exécution peut être définie pour plusieurs portées. ordinateur, utilisateur actuel et processus en cours. Les stratégies d'exécution peuvent facilement être ignorées et ne sont pas conçues pour restreindre les utilisateurs, mais plutôt pour les protéger contre la violation involontaire de stratégies de signature.

Les politiques disponibles sont les suivantes:

Réglage La description
Limité Aucun script autorisé
AllSigned Tous les scripts doivent être signés
RemoteSigned Tous les scripts locaux autorisés; uniquement des scripts distants signés
Libre Aucune exigence Tous les scripts sont autorisés, mais avertiront avant d'exécuter des scripts téléchargés à partir d'Internet
Contourne Tous les scripts sont autorisés et aucun avertissement n'est affiché
Indéfini Supprimez la stratégie d'exécution en cours pour l'étendue actuelle. Utilise la politique parent. Si toutes les règles sont indéfinies, la restriction sera utilisée.

Vous pouvez modifier les stratégies d'exécution en cours à l'aide du Set-ExecutionPolicy -cmdlet, Group Policy ou -ExecutionPolicy lors du lancement d'un processus powershell.exe .

En savoir plus sur about_Execution_Policies @ TechNet

Signer un script

La signature d'un script s'effectue à l'aide de la cmdlet Set-AuthenticodeSignature et d'un certificat de signature de code.

#Get the first available personal code-signing certificate for the logged on user
$cert = @(Get-ChildItem -Path Cert:\CurrentUser\My -CodeSigningCert)[0]
    
#Sign script using certificate
Set-AuthenticodeSignature -Certificate $cert -FilePath c:\MyScript.ps1

Vous pouvez également lire un certificat à partir d'un .pfx .pfx en utilisant:

$cert = Get-PfxCertificate -FilePath "C:\MyCodeSigningCert.pfx"

Le script sera valide jusqu'à l'expiration du certificat. Si vous utilisez un serveur d'horodatage lors de la signature, le script continuera à être valide après l'expiration du certificat. Il est également utile d'ajouter la chaîne d'approbation du certificat (y compris l'autorité racine) pour aider la plupart des ordinateurs à faire confiance au certificat utilisé pour signer le script.

Set-AuthenticodeSignature -Certificate $cert -FilePath c:\MyScript.ps1 -IncludeChain All -TimeStampServer "http://timestamp.verisign.com/scripts/timstamp.dll"

Il est recommandé d'utiliser un serveur d'horodatage auprès d'un fournisseur de certificats de confiance tel que Verisign, Comodo, Thawte, etc.

Modification de la stratégie d'exécution à l'aide de Set-ExecutionPolicy

Pour modifier la stratégie d'exécution de la portée par défaut (LocalMachine), utilisez:

Set-ExecutionPolicy AllSigned

Pour modifier la stratégie pour une portée spécifique, utilisez:

Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy AllSigned

Vous pouvez supprimer les invites en ajoutant le commutateur -Force .

Contournement de la politique d'exécution pour un seul script

Vous devrez souvent exécuter un script non signé qui ne respecte pas la stratégie d'exécution en cours. Un moyen simple de le faire est de contourner la stratégie d'exécution pour ce processus unique. Exemple:

powershell.exe -ExecutionPolicy Bypass -File C:\MyUnsignedScript.ps1

Ou vous pouvez utiliser la sténographie:

powershell -ep Bypass C:\MyUnsignedScript.ps1

Autres politiques d'exécution:

Politique La description
AllSigned Seuls les scripts signés par un éditeur approuvé peuvent être exécutés.
Bypass Pas de restrictions; tous les scripts Windows PowerShell peuvent être exécutés.
Default Normalement RemoteSigned , mais est contrôlé via ActiveDirectory
RemoteSigned Les scripts téléchargés doivent être signés par un éditeur approuvé avant de pouvoir être exécutés.
Restricted Aucun script ne peut être exécuté. Windows PowerShell ne peut être utilisé qu'en mode interactif.
Undefined N / A
Unrestricted * Similaire à bypass

Unrestricted* Avertissement: Si vous exécutez un script non signé qui a été téléchargé depuis Internet, vous êtes invité à en demander l'autorisation avant de l'exécuter.


Plus d'informations disponibles ici .

Obtenir la politique d'exécution actuelle

Obtenir la politique d'exécution effective pour la session en cours:

PS> Get-ExecutionPolicy
RemoteSigned

Énumérer toutes les politiques d'exécution efficaces pour la session en cours:

PS> Get-ExecutionPolicy -List

        Scope ExecutionPolicy
        ----- ---------------
MachinePolicy       Undefined
   UserPolicy       Undefined
      Process       Undefined
  CurrentUser       Undefined
 LocalMachine    RemoteSigned

Énumérer la politique d'exécution pour une portée spécifique, ex. processus:

PS> Get-ExecutionPolicy -Scope Process
Undefined

Obtenir la signature d'un script signé

Obtenez des informations sur la signature Authenticode à partir d'un script signé à l'aide de la cmdlet Get-AuthenticodeSignature :

Get-AuthenticodeSignature .\MyScript.ps1 | Format-List *

Création d'un certificat de signature de code auto-signé pour le test

Lors de la signature de scripts personnels ou lors du test de signature de code, il peut être utile de créer un certificat de signature de code auto-signé.

5.0

À partir de PowerShell 5.0, vous pouvez générer un certificat de signature de code auto-signé à l'aide de la New-SelfSignedCertificate SelfSignedCertificate:

New-SelfSignedCertificate -FriendlyName "StackOverflow Example Code Signing" -CertStoreLocation Cert:\CurrentUser\My -Subject "SO User" -Type CodeSigningCert

Dans les versions antérieures, vous pouvez créer un certificat auto-signé à l'aide de l'outil makecert.exe situé dans le Kit de développement .NET Framework SDK et Windows SDK.

Un certificat auto-signé ne sera approuvé que par les ordinateurs sur lesquels le certificat a été installé. Pour les scripts qui seront partagés, un certificat provenant d'une autorité de certification approuvée (interne ou tiers de confiance) est recommandé.



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow