PowerShell est un shell en ligne de commande et un langage de scripting orienté objets développé par Microsoft.
Contrairement au Batch (le shell historique de Windows), Powershell manipule des objets, pas juste du texte.
Il sert à exécuter des commandes, automatiser des tâches, administrer des systèmes (Windows, Windows Server).
Il existe en 2 version :
– Windows Powershell -> version originale
– PowerShell (core) -> version moderne et multiplateforme (Windows, Linux, MacOS)
Les commandes PowerShell s’appellent : cmdlet.
Copy
Copier un ou plusieurs fichiers à un emplacement spécifique.
Copy-Item C:\Folder1\Data.txt -Destination C:\Folder2Copier le contenu d’un dossier à un emplacement spécifique.
Copy-Item C:\Folder1\*.* -Destination C:\Folder2Copier un dossier de manière récursive.
Copy-Item C:\Folder1 -Destination C:\Folder2 -RecurseSet-ExecutionPolicy
La commande Set-ExecutionPolicy sert à définir le niveau de sécurité pour l’exécution des scripts en « .ps1 ».
Exemple (user mod) : pour connaître la politique d’exécution actuelle, utilisez la commande suivante :
Get-ExecutionPolicyOutput :

Le code de sortie indique « Restricted« , ce qui signifie que cette politique est au niveau le plus restrictif, seules les commandes tapées manuellement dans la console fonctionne.
Exemple 2 en tapant cette même commande en administrateur :

Le code de sortie est le même, que la cmdlet soit lancée en utilisateur (user) ou administrateur.
La cmdlet Set-ExecutionPolicy permet de modifier la politique d’exécution en indiquant la politique d’exécution souhaitée.
Les noms des politiques d’exécution sont :
– AllSigned = tous les scripts doivent être signés (locaux ou distants)
– Bypass = aucune restriction ni avertissement
– Default = applique la configuration par défaut de Windows
– RemoteSigned = scripts locaux autorisés, scripts téléchargés doivent être signés
– Restricted = aucun script autorisé
– Undefined = aucune politique définie à ce niveau
– Unrestricted = tous scripts autorisés avec avertissement
Set-ExecutionPolicy UnrestrictedCette opération nécessite que le script soit exécuté dans un contexte élevé (en tant qu’administrateur) et ne renvoie aucune commande de sortie (Output).
Get-History
La cmdlet Get-History permet de récupérer une liste des commandes qui ont été saisies dans la session en cours.
Get-History
Output :

Get-WUHistory
La cmdlet Get-WUHistory permet de récupérer une liste des mises à jour Windows installées sur le système.
Pour l’utiliser, il faudra installer le module suivant :
Install-Module -Name PSWindowsUpdate -ForceSuite à ça, la commande suivante vous permettra de récupérer un ensemble de mise à jour installées sur le système sous forme de grille.
Très pratique pour réutiliser les donner dans un fichier Excel par exemple :
Get-WUHistory | Sort-Object kb, Date, Title | Where-Object {$_.kb -ne ""} | Out-GridViewPour avoir un résultat sur les 31 jours :
Get-WUHistory -MaxDate $((Get-Date).AddDays(-31)) | Out-GridViewPour cibler une KB particulière :
Get-WUHistory | Where-Object { $_.KB -eq "KB5035853" }Créer des rapports HTML
Il peut être très intéressant de créer des rapports sous forme de tableaux lisibles via navigateur.
L’une des commandes qui est native à Powershell pour créer un rapport HTML est :
ConvertTo-HTMLMais, bien qu’elle soit pratique, l’affichage est trop simpliste.
Nous allons nous concentrer sur « PSWriteHTML », un module qui, en plus de créer des rapports HTML, va nous permettre de les rendre interactifs en effectuant une recherche, un filtre, etc.
A noter qu’il y a plus de 200 cmdlets Powershell dans ce module…
Commençons par le télécharger :
Install-Module -Name PSWriteHTML
Une fois téléchargé, nous allons donc essayer de créer un rapport en utilisant la commande « Get-Process » afin d’afficher tous les processus en cours d’exécution sur le système.
New-HTML -Title "Rapport PowerShell" -FilePath "C:\Scripts\HTML\Rapport.html" {
>> New-HTMLSection -HeaderText "Liste des processus" {
>> New-HTMLTable -DataTable (Get-Process)
>> }
>> }Voilà ce que ça donne :
