5.1 : Écrire son premier script .ps1

Jusqu’ici, toutes les commandes ont été tapées directement dans la console. Sophie ferme le terminal interactif : « Une commande tapée à la main, c’est bien pour explorer. Mais pour un ticket qui revient chaque semaine, on écrit un script une bonne fois pour toutes. » Après plusieurs années à automatiser des tâches d’administration système, c’est justement l’écart entre « taper une commande » et « écrire un script fiable, réutilisable par un collègue » qui prend le plus de temps à maîtriser — bien plus que la syntaxe elle-même.

Créer et enregistrer un script

Un script PowerShell est un simple fichier texte portant l’extension .ps1 :

Get-Process | Sort-Object -Property WS -Descending | Select-Object -First 5

Enregistrez ce contenu dans un fichier top5-processus.ps1, avec n’importe quel éditeur de texte (Notepad, VS Code, ISE…). Rien de magique dans le fichier lui-même : c’est exactement ce que vous auriez tapé dans la console, simplement mis de côté pour être réexécuté à volonté.

Retour d’expérience terrain : privilégiez Visual Studio Code avec l’extension officielle « PowerShell » (éditée par Microsoft) plutôt que le Bloc-notes. La coloration syntaxique et l’auto-complétion évitent une bonne partie des fautes de frappe qui, sur un script de 200 lignes, deviennent très difficiles à repérer à l’œil nu.

Exécuter un script

Depuis une console PowerShell, on exécute un script en précisant son chemin, précédé de .\ s’il se trouve dans le dossier courant :

.\top5-processus.ps1

Le .\ n’est pas une coquetterie : contrairement à CMD, PowerShell n’exécute jamais un script du dossier courant sans cette précision explicite, pour des raisons de sécurité (éviter qu’un script malveillant portant le même nom qu’une commande système ne s’exécute par erreur).

ExecutionPolicy : le premier blocage que vous rencontrerez

Sur une installation Windows par défaut, exécuter ce script produira très probablement une erreur du type :

impossible de charger le fichier ... car l'exécution de scripts est désactivée sur ce système

C’est la politique d’exécution (ExecutionPolicy) de PowerShell, une protection contre l’exécution accidentelle de scripts non vérifiés. Pour consulter la politique actuelle :

Get-ExecutionPolicy

Pour l’assouplir sur votre poste de travail personnel (jamais en production sans validation de votre équipe sécurité) :

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

RemoteSigned autorise l’exécution des scripts écrits localement, tout en exigeant une signature numérique pour les scripts téléchargés depuis Internet — un bon compromis pour l’apprentissage. On détaillera la signature de scripts et les enjeux de sécurité associés en section 9.

Source officielle : la documentation Microsoft sur about_Execution_Policies détaille l’ensemble des niveaux disponibles (Restricted, AllSigned, RemoteSigned, Unrestricted, Bypass) et leurs implications de sécurité respectives. Accessible directement en console avec Get-Help about_Execution_Policies, ou sur learn.microsoft.com.

Structurer un script lisible

Même court, un script gagne à suivre une structure simple, dès cette première leçon :

<#
.SYNOPSIS
    Affiche les 5 processus consommant le plus de mémoire.
.DESCRIPTION
    Script utilisé par le service IT de Nordika pour un diagnostic rapide
    en cas de ralentissement signalé sur un poste.
.NOTES
    Auteur : Service IT Nordika
    Dernière modification : 24/07/2026
#>

Get-Process | 
    Sort-Object -Property WS -Descending | 
    Select-Object -First 5

Ce bloc <# ... #> est un commentaire d’aide (comment-based help) : il permet même à Get-Help .\top5-processus.ps1 de fonctionner sur votre propre script, exactement comme sur une cmdlet native. On détaille les commentaires et l’indentation plus en profondeur dans la prochaine leçon.

Un piège fréquent : l’encodage du fichier

Point souvent absent des tutoriels, mais rencontré régulièrement en environnement d’entreprise : un script contenant des accents (é, à, ç…) enregistré en encodage ANSI plutôt qu’UTF-8 avec BOM peut afficher des caractères corrompus une fois exécuté sur un autre poste, ou par un autre utilisateur avec des paramètres régionaux différents.

Get-Content .\top5-processus.ps1 -Encoding UTF8 | Set-Content .\top5-processus.ps1 -Encoding UTF8

Bonne pratique constatée en production : dans la plupart des éditeurs modernes (VS Code notamment), configurez explicitement l’encodage par défaut des fichiers .ps1 en UTF-8 with BOM, particulièrement si vos scripts sont partagés entre plusieurs administrateurs ou déposés sur un dépôt Git commun.

Version testée pour cette formation

Les exemples de cette formation ont été rédigés et testés avec PowerShell 7.4 sur Windows 11 et Windows Server 2022. La quasi-totalité du contenu reste valable sur Windows PowerShell 5.1, à l’exception des points explicitement signalés (comme Get-Verb dont la liste s’est enrichie au fil des versions, ou certains modules multiplateformes récents).

Un script .ps1, c’est le passage du geste ponctuel à l’outil réutilisable de l’atelier Nordika : une fois écrit, testé et partagé, n’importe quel collègue du service IT peut s’en servir sans avoir à retenir la commande exacte.

Dans la prochaine leçon, avant de plonger dans les structures de contrôle, on pose les bonnes pratiques d’écriture : indentation et commentaires — des habitudes qui feront gagner un temps précieux sur tous les scripts à venir.