Comment exécuter un script PowerShell à partir de la ligne de commande et plus encore

Si vous êtes nouveau dans le langage de script PowerShell et que vous souhaitez apprendre à exécuter un script PowerShell, vous êtes au bon endroit. Cet article de blog sera un tutoriel couvrant les méthodes courantes pour exécuter des scripts et quelques problèmes qui peuvent survenir.

Prérequis

Cet article sera un guide pas à pas pour vous expliquer comment exécuter PowerShell sur votre ordinateur local. Si vous souhaitez suivre, assurez-vous d’avoir les prérequis suivants en place avant de commencer cet article.

  • A Windows 10 computer with Administrator privileges.
  • Windows version PowerShell 5 ou supérieure. Vous pouvez également utiliser PowerShell v7. Ce tutoriel se concentrera sur Windows PowerShell puisque le système d’exploitation Windows l’inclut déjà.
  • N’importe quel éditeur de fichiers texte

Gestion de la stratégie d’exécution

Si c’est la première fois que vous essayez d’exécuter un script PowerShell Windows, vous pouvez rencontrer un problème courant. PowerShell retournera probablement un message d’erreur indiquant qu’un script « ne peut pas être chargé car l’exécution des scripts est désactivée sur ce système ».

PS> .\GetServices.ps1
 File C:\Temp\GetServices.ps1 cannot be loaded because running scripts is disabled on this system. For more information, see about_Execution_Policies at
 https:/go.microsoft.com/fwlink/?LinkID=135170.
 At line:1 char:1
 .\GetServices.ps1
 ~~~~~ CategoryInfo          : SecurityError: (:) [], PSSecurityException
 FullyQualifiedErrorId : UnauthorizedAccess   

PowerShell renvoie le message d’erreur ci-dessus lorsque vous essayez d’exécuter un script PowerShell avec une stratégie d’exécution définie sur Restreint, Signé à distance ou Tous signés.

Restreint

Restreint est la stratégie par défaut définie pour les ordinateurs clients Windows. Si vous utilisez PowerShell pour la première fois, votre stratégie par défaut serait probablement définie pour restreindre tous les scripts.

Vous pouvez toujours exécuter des commandes individuelles dans un terminal, mais pas un fichier script. La restriction inclut tout fichier se terminant par .ps1xml, .psm1 ou .ps1.

Non restreint

Non restreint vous permet d’exécuter n’importe quel script, cependant, il vous avertit avant l’exécution si le script est téléchargé depuis internet. Cette stratégie est généralement la défaut pour tout dispositif non-Windows.

Signé à distance

La stratégie Signé à distance vous permet d’exécuter tout script qui est soit (a) signé numériquement ou (b) tout script écrit sur votre ordinateur local avec ou sans signature.

Si un script est téléchargé depuis internet et n’est pas signé, vous devrez débloquer le fichier. Vous pouvez le faire en cliquant avec le bouton droit sur le fichier et en choisissant Propriétés. Ou, vous pouvez utiliser la cmdlet PowerShell Unblock-File pour ce script particulier.

Utiliser une stratégie Signé à distance serait une option idéale lors de l’exécution d’un script téléchargé depuis internet.

Tous signés

Tous signés nécessite que tous les scripts soient signés numériquement par un éditeur de confiance. Cela inclut les scripts téléchargés depuis internet et écrits localement sur votre ordinateur.

Changement de la politique d’exécution PowerShell

Pour changer la politique d’exécution:

  1. Ouvrez Windows PowerShell en tant qu’administrateur pour vous assurer que vous disposez des autorisations les plus élevées pour effectuer les modifications de la politique.
Search PowerShell in Start Menu

2. Une fois ouvert, exécutez la commande PowerShell suivante pour définir la politique d’exécution de votre ordinateur. La politique d’exécution, comme expliqué ci-dessus, peut être l’un des trois types différents. Ce tutoriel utilise une politique d’exécution utile mais toujours sécurisée de RemoteSigned.

Étant donné que ce tutoriel suppose que vous avez téléchargé depuis Internet le fichier de script GetServices.ps1, définissez la politique d’exécution sur RemoteSigned.

PS> Set-ExecutionPolicy RemoteSigned

La politique d’exécution RemoteSigned vous oblige à signer cryptographiquement chaque script PowerShell téléchargé depuis Internet avant que PowerShell ne l’exécute sur votre système.

3. Vous devriez voir une sortie demandant de confirmer l’action. Entrez O et appuyez sur Entrée pour confirmer le changement de politique.

Execution Policy Change
 The execution policy helps protect you from scripts that you do not trust. Changing the execution policy might expose you to the
 security risks described in the about_Execution_Policies help topic at https:/go.microsoft.com/fwlink/?LinkID=135170. Do you want to
 change the execution policy?
 [Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "N"): 

À ce stade, suivez les étapes suivantes pour explorer différentes méthodes pour exécuter le script PowerShell sur votre ordinateur.

Comment exécuter un script PowerShell

Pour démontrer l’exécution d’un script PowerShell, vous avez en fait besoin d’un fichier de script à exécuter ! Si vous n’en avez pas sous la main, vous pouvez télécharger ce fichier ZIP et extraire le fichier PS1 à l’intérieur. Vous trouverez à l’intérieur un fichier de script simple appelé GetServices.ps1.

Write-Output "Listing Computer Services"
Get-Service

Chaque script PowerShell doit se terminer par une extension .ps1.

Utilisation de la console

Une fois que vous avez un script prêt, il existe plusieurs façons d’exécuter un fichier de script PowerShell. L’une des façons les plus courantes est via la console PowerShell.

Pour ce faire :

  1. Ouvrez la console PowerShell comme indiqué ci-dessus.

2. Accédez à l’emplacement du système de fichiers où se trouve votre script en utilisant la cmdlet PowerShell Set-Location ou l’alias cd. Le script de ce tutoriel se trouve dans le répertoire C:\Temp.

PS> cd C:\Temp\

3. Exécutez le script en utilisant une notation point (.). PowerShell est un shell qui recherche également des noms de commandes. Pour différencier une commande PowerShell d’un script, vous devez préfixer le script avec un point. Ce point représente le répertoire courant.

 PS> .\GetServices.ps1

Comment exécuter un script PowerShell depuis la ligne de commande via l’emplacement PowerShell

Si vous ne pouvez pas ou ne souhaitez pas exécuter de scripts via la console PowerShell, vous pouvez également le faire avec la bonne vieille ligne de commande (invite de commande).

Pour exécuter des scripts via l’invite de commandes, vous devez d’abord démarrer l’exécutable PowerShell (\texttt{powershell.exe}), avec l’emplacement de PowerShell de \texttt{C:\Program Files\WindowsPowerShell\powershell.exe}, puis passer le chemin du script en tant que paramètre.

Vous pouvez exécuter des scripts avec des paramètres dans n’importe quel contexte en les spécifiant simplement lors de l’exécution de l’exécutable PowerShell comme \texttt{powershell.exe -Parameter ‘Foo’ -Parameter2 ‘Bar’}.

Une fois que vous avez ouvert \texttt{cmd.exe}, vous pouvez exécuter un script PowerShell comme ci-dessous. Cet exemple exécute le moteur et lui passe le chemin du script \texttt{C:\Temp\GetServices.ps1}.

Remarquez ci-dessous que l’exemple utilise le chemin de l’emplacement de PowerShell pour exécuter le script. Vous devrez le faire si le dossier n’est pas quelque part dans votre chemin d’accès (\textit{PATH}).

CMD> C:\Program Files\WindowsPowerShell\powershell.exe "C:\Temp\GetServices.ps1"

L’emplacement de PowerShell pour PowerShell 7 utilise un exécutable différent nommé \texttt{pwsh.exe} situé généralement dans \texttt{C:\Program Files\PowerShell\7\pwsh.exe}.

Ci-dessous se trouve une vidéo YouTube pratique qui explique comment exécuter un script via un fichier batch que \texttt{cmd.exe} exécute.

Utilisation de l’ISE PowerShell

Si vous créez vos propres scripts ou modifiez ceux des autres, vous utiliserez probablement un éditeur de scripts comme l’\textit{PowerShell ISE} ou peut-être \textit{Visual Studio (VS) Code}. Puisque l’ISE est livré avec Windows, concentrons-nous sur cette méthode pour ce tutoriel.

Pour invoquer un script via l’ISE :

  1. Accédez au menu Démarrer, recherchez PowerShell ISE et ouvrez-le.
Search PowerShell ISE in Start Menu

2. Cliquez sur FichierOuvrir et trouvez votre script.

Open Script using File Menu

3. Avec le script ouvert, cliquez sur le bouton d’exécution vert pour exécuter le script. Ce bouton invoquera le script dans le terminal PowerShell intégré en bas.

Run Script using PowerShell ISE

La sortie du script d’exemple

A PowerShell script can sometimes return output. This happens when the script you’re executing is built to return objects which is a fundamental component of PowerShell.

Si vous exécutez le script GetServices.ps1 par exemple, vous verrez ce qui suit. Ce script exécute la cmdlet Get-Service qui renvoie tous les services installés sur votre ordinateur Windows local.

PS> .\GetScripts.ps1
Listing Computer Services
Status   Name               DisplayName
------   ----               -----------
Running  aakore             Acronis Agent Core Service
Stopped  AarSvc_1b668d      Agent Activation Runtime_1b668d
Running  AcronisActivePr... Acronis Active Protection Service
Running  AcronisCyberPro... Acronis Cyber Protection Service
Running  AcrSch2Svc         Acronis Scheduler2 Service
Running  AdobeARMservice    Adobe Acrobat Update Service
Running  AdobeUpdateService AdobeUpdateService
Running  AGMService         Adobe Genuine Monitor Service
Running  AGSService         Adobe Genuine Software Integrity Se...
----Truncated----

Exécution d’un script PowerShell depuis un autre script

Supposons que vous ayez deux scripts et que vous souhaitiez que l’un appelle l’autre. Peut-être avez-vous un script appelé GetUser.ps1 et un appelé ResetPassword.ps1. À l’intérieur du script GetUser.ps1, vous souhaitez exécuter le ResetPassword.ps1 pour réinitialiser le mot de passe d’un utilisateur.

À l’intérieur du script appelant (GetUser.ps1), vous ajouteriez une ligne pour exécuter l’autre script comme vous le feriez depuis la ligne de commande.

Vous pouvez voir ci-dessous que vous avez quelques options. Vous devriez généralement choisir d’exécuter l’autre script dans la même session ou portée pour simplifier les choses, sauf si vous avez une raison spécifique de l’exécuter dans une autre session PowerShell.

## Pour exécuter l'autre script dans une nouvelle session
powershell.exe .\ResetPassword.ps1
## Pour exécuter l'autre script dans la même session
.\ResetPassword.ps1

Source:
https://adamtheautomator.com/run-powershell-script/