Dans l’article comment installer et vérifier le bon fonctionnement de PowerShell, nous avions ouvert l’interpréteur de commande PowerShell et exécuté quelques instructions. Si l’utilisation de l’interpréteur suffit pour lancer quelques commandes occasionnelles, cela devient vite contraignante s’il s’agit de lancer toute une série de commandes. Dans ce cas l’utilisation de scripts, que vous allez pouvoir conserver, modifier selon le besoin et partager avec vos collègues, sera plus appropriée. Nous allons découvrir dans cet article comment exécuter un script Powershell.
Consultez la section Powershell Pour les Nuls pour accédez à l’index de tous les tutoriels Powershell proposés sur SysKB
Un script Powershell peut être lancé à partir d’un fichier .BAT , d’une invite de commande, depuis l’interpréteur Powershell, d’un service, d’une tâche planifiée ou simplement en double cliquant sur le script.
Créer un script Powershell
Pour créer un fichier de script PowerShell, il suffit de créer un fichier ayant pour extension .PS1 dans lequel vous allez copier votre code.
Nous créons par exemple un fichier nommé monscript.ps1 dans lequel nous copions le code suivant:
((ipconfig | findstr [0-9].\.)[0]).Split()[-1] function Pause ($Message="Appuyez sur une touche pour quitter...") { Write-Host -NoNewLine $Message $null = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown") Write-Host ""} Pause
Ce script permet d’afficher votre adresse IP puis de faire une pause avant de sortir.
Modifier les paramètres de sécurité de Powershell
Si nous tentons d’exécuter ce script en ouvrant une invite de commande et en tapant la commande suivante:
powershell c:\monscript.ps1
Il est fort probable que vous obteniez le message suivant :
C:\>powershell c:\monscript.ps1
Impossible de charger le fichier C:\monscript.ps1, car l'exécution de scripts est désactivée sur ce système. Pour plus d'informations, consultez « get-help about_signing ». Au niveau de ligne : 1 Caractère : 16 + c:\extractad.ps1 <<<<
C:\>
En effet il va falloir au préalable modifier les paramètres de sécurité implémentés dans PowerShell. Par défaut il est impossible de lancer un script sans passer par l’interpréteur PowerShell. Nous allons donc modifier une bonne fois pour toute ces paramètres de sécurité.
Pour cela ouvrez l’interpréteur PowerShell et entrez la commande suivante:
PS C:\> Get-ExecutionPolicy
Vous devriez alors obtenir le résultat suivant:
PS C:\> Get-ExecutionPolicy Restricted PS C:\>
PowerShell propose 4 modes de sécurité différents:
- Restricted
- AllSigned
- RemoteSigned
- Unrestricted
Toujours dans l’interpréteur PowerShell entrez la commande suivante afin de changer de mode et d’autoriser l’exécution de script locaux :
PS C:\> Set-ExecutionPolicy RemoteSigned
Vous pouvez vérifier que le changement est bien été effectué en retapant la commande suivante:
PS C:\> Get-ExecutionPolicy
Vous devriez cette fois obtenir le résultat suivant:
PS C:\> Get-ExecutionPolicy RemoteSigned PS C:\>
Vous pouvez désormais exécuter un script Powershell depuis votre station de travail.
Exécuter un script Powershell
A présent il est possible d’exécuter le script précédemment créé suivant la méthode de votre choix:
En ligne de commande
En ouvrant une invite de commande et en exécutant la commande suivante:
powershell c:\monscript.ps1
le résultat obtenu doit être de la forme suivante:
C:\>powershell c:\monscript.ps1 192.168.0.10 Press any key to continue...
Depuis l’interpréteur Powershell
Il est bien évidement possible d’exécuter un script PowerShell depuis l’interpréteur Powershell en tapant la commande suivante:
.\nomduscript.ps1
C’est notamment très pratique lors du débogage d’un script !
Depuis un fichier .BAT
Ce n’est qu’un variante de l’exécution par la ligne de commande puisqu’il suffit de créer un fichier .BAT contenant le code suivant:
powershell c:\monscript.ps1
Via un service Windows ou le planificateur de tâches
Il suffit cette fois d’utiliser de planifier l’exécution du fichier .BAT via un service ou une tâche planifiée. Il existe des outils gratuit pour créer facilement un service Windows.
Ça ne marche pas avec Windows 11
Bonjour Raph,
Qu’est ce qui ne marche pas sous Windows 11 ?
OC.
Bonjour,
Ma petite contribution dans un batch :
echo off
set parm1=toto
set parm2=tata
powershell -Command "$TDate=[DateTime]::Today.AddMonths(-1)|Get-Date -format "yyyyMM";C:\Bureau\coursPS\cours.bat %parm1% %parm2% $TDate"
execute un batch (ici : cours.bat) avec 3 paramètres :
Résultat (pour la date calcul du mois précédent en fonction du mois en cours)
toto tata 201607
Merci mille fois, simple et rapide pour être acteur sans passer par une théorie inutile à ce stade
Bonjour, je sais que cet article date un peu, mais je débute en powershell et celui ci est très bien fait.
Mon petit problème c’est que je fais des test sur 3 pc de mes scripts (le mien sous windows 7, un qui a un environnement de dev powershell sous windows 10 et un qui a juste la cmd powershell sous windows 7 ) et celui sous windows 10, lors de son redémarrages me réinitialise l’executionpolicy, donc je dois refaire toute la manip que tu cites chaque jour, ce qui est un peu contraignant … Est ce que quelqu’un aurait une idée de pourquoi et surtout comment remédier à ce problème ?
Merci bien
PS: le pc sans rien sous windows 7 n’a aucun soucis et garde l’exécutionpolicy a unrestricted tout les jours
Merci pour ce superbe article 🙂
Il faut quand même executer le poweShell en tant qu’admin sinon on le jlie message :
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShellHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\P
owerShell\1\ShellIds\Microsoft.PowerShellExecutionPolicy: : Le module «HKEY_LOCAL_MACHINE» n’a pas pu être chargé.
Pour plus d’informations, exécutez la commande «Import-Module HKEY_LOCAL_MACHINE».
Au caractère Ligne:1 : 1
+ HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell …
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (HKEY_LOCAL_MACH…xecutionPolicy::String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CouldNotAutoLoadModule
Sypma article, simple, claire et utile.
Merci
super script …… pour débuter en PowerShell …super merci
Merci bien pour le script, il fonctionne parfaitement.
Excellent article !!! bien détaillé.
Merci encore….
Merci bien, super clair pour débuter.