Windows dispose d’Outil d’administration et d’automatisation : MS-DOS et PowerShell. Historique, formats, Module, Pipeline, edition de code… présentation complète.
Les scripts ont différentes utilités
- Gérer les serveurs
- Faire des manipulations sur l’AD
- Administrater des postes Windows (XP jusqu’à 11).
MS-DOS
MS-DOS est la solution utilisé depuis des générations pour générer des scripts pour Windows. Il permet de générer notamment des fichiers de script en .bat ou .cmd et d’exécuter un ensemble d’opérations.
PowerShell
Powershell 1.0 est sortie le 14 novembre 2006.
Powershell est un langage basé sur le framework .NET Framework (Windows Powershell). Une nouvelle version, Powershell Core, basé sur .NET CORE est en cours de développement. La version la plus complète est celle qui se base sur le .NET Framework (Windows/Desktop Powershell)
IT-Connect
Il permet d’exécuter en ligne de commande des opérations, ou de créer des script executable (.ps1). Au 10/10/2024 PowerShell en est à sa version 7.4.
| Au 14/11/2023 Powershell 5.1 existe uniquement sous .NET Framework. Puis dés la version 6.0 deux déclinaison sont entrenu : PowerShell Desktop (.Net Framework) et PowerShell Core (.NET Core). |
On distingue un outil, Windows PowerShell, qui est l’invité de commande…

… ainsi que Windows PowerShell ISE, qui est un IDE pour le développement en PowerShell…

…et PowerShell Core (basé sur .NET Core) qui est une version du langage en cours de développement tandis que PowerShell est la version la plus utilisé (basé sur .NET Framework)
Premiers pas
Les scripts PowerShell utilise l’extension .ps1 est utilisable par n’importe quel éditeur de code.
Powershell permet d’exécuter des commandes (cmdlets, prononcé commandlettes). Les commande (méthodes existantes) respecte une nomenclature précise :
- Get- pour obtenir des informations (exemple : Get-Help, Get-ChildItem)
- New- pour créer un nouvel élément
- Add- pour ajouter un élément
- Set- …

Les commandes ont des alias : des écritures plus brèves permettant l’execution des dîtes commandes.
La commande Get-ChildItem a par exemple deux alias : gci et le très connu dir |
Comment obtenir la liste des Alias existant ?…
Simple : c’est la commande Get-Alias qui permet de les lister, tout simplement.
Chaque script peut être exécuté sur un PC selon la politique de sécurité en cours d’application sur la machine. (l’Execution Policy). « Unrestricted » est souvent la valeur par défaut.
Comment influer sur la politique de sécurité d’un PC ?…
Simple : c’est la commande Get-ExecutionPolicy permet d’obtenir celle en place, et Set-ExecutionPolicy Value (Value pouvant être Unrestricted, Bypass, AllSigned…)
Les Modules
Les Modules sont des sortes « d’extension » à Powershell. Elles peuvent être créé par l’utilisateur ou développées par des entité, local au poste et/ou proposées en téléchargement. En somme, cela devient des fonctionnalité supplémentaire une fois le module ajouté sur le poste.
| $env:psmodulepath est la variable d’environnement interrogeable pour obtenir le/les chemin(s) des modules existants. Dans mon cas : C:\Users\o.mas\Documents\WindowsPowerShell\Modules; C:\Program Files (x86)\WindowsPowerShell\Modules; C:\Program Files\WindowsPowerShell\Modules; C:\Windows\system32\WindowsPowerShell\v1.0\Modules; C:\Program Files (x86)\AutoIt3\AutoItX |
Leur gestions se fait tout naturellement avec les commandes (ou cmdlets) Get-Module (-ListAvailable), Find-Module, Install-Module <nom du module> etc.
L’activation d’un module dans un script powershell passe par la commande Import-Module. Exemple :
Bases de code
Les variables
[string]$Name = "Nom"
$MaVariable.GetType() //Renvoie "String"
Le Pipeline
En PowerShell, le pipeline permet d’interconnecter différentes commandes puisque la sortie d’une commande sera l’entrée de la suivante.
IT-Connect
Dans les fait le/la « pipeline » (ou « pipe » : | ) indique juste que l’on va exécuter une autre commande à partir du résultat de la première.
Elle est notamment utilisée pour le filtre de donnée récupérée : Exemple :
Get-Service | Where-Object{ $_.Status -eq "Running" }
Ici, on obtient la liste des services puis on filtre ceux dans l’état Running.
De même on peut faire cela :
$servicewuauserv = Get-Service wuauserv
$servicewuauserv | Stop-Service
Cela revient à écrire
Stop-Service wuauserv
TAB
L’autocomplétion est permise dans Powershell ISE.
Pour faire défiler les choix il suffit de scroller dans la liste proposer ou sinon d’appuyer sur TAB une fois la première lettre de la deuxième partit de la commande saisie (Ex : Get-S permettra que TAB fasse défiler toutes les commandes liées).
Utiliser un Modules
#Importer le module désiré
Import-Module ActiveDirectory
#Obtenir la liste des commandes
Get-Command -Module ActiveDirectory
Obtenir un utilisateur de l’AD
ADUser -Filter "SamAccountName -eq 'Administrateur'"
Conditions
Les conditions respecte le formalisme de nombreux langage :
if(condition) { instruction }
Exemple
if(Get-Process -Name "AISuite3"){
Write-Output "AISuite3 existe !"
} else {
Write-Output "AISuite3 n'existe pas..."}