2021-05-08 16:42:09 +02:00
<!--
title: Powershell
description:
published: true
2021-05-09 19:59:33 +02:00
date: 2021-05-09T17:59:32.461Z
2021-05-08 16:42:09 +02:00
tags:
editor: ckeditor
dateCreated: 2021-05-08T14:42:07.092Z
-->
2021-05-09 15:26:40 +02:00
< h1 > Définition< / h1 >
2021-05-09 12:50:15 +02:00
< p > PowerShell est un langage script fondé sur la programmation orientée objet. Le logiciel PowerShell est l'interpréteur de l’interface en ligne de commande de l'environnement de développement Windows PowerShell.< / p >
< p > < / p >
2021-05-09 17:13:10 +02:00
< h2 > Les commandes ou applets de commande (cmdlet)< / h2 >
2021-05-09 12:20:19 +02:00
< p > elles sont composées d’une paire de la forme “verbe ”-“nom” destiné à en faciliter la mémorisation.< / p >
2021-05-09 12:42:51 +02:00
< p > exemple :< / p >
2021-05-09 12:20:19 +02:00
< pre > < code class = "language-plaintext" > get-service< / code > < / pre >
< p > get = verbe< / p >
< p > service = nom< / p >
2021-05-09 12:42:51 +02:00
< p > < / p >
2021-05-09 12:51:47 +02:00
< h2 > Les variables< / h2 >
2021-05-09 14:13:42 +02:00
< p > Une variable PowerShell est un emplacement de stockage provisoire en mémoire destiné à recueillir une valeur, un objet ou une collection d’objets.< br > Les variables sont généralement nommées, et leurs noms sont toujours précédés d’un symbole “$“< br > Les variables sont automatiquement “typées” lors de l’affectation de valeur (si elles ne sont pas déclarées au préalable.)< / p >
2021-05-09 12:42:51 +02:00
< p > exemple :< / p >
2021-05-09 16:09:28 +02:00
< pre > < code class = "language-plaintext" > $variable = une valeur < / code > < / pre >
2021-05-09 12:42:51 +02:00
< p > < / p >
2021-05-09 14:13:42 +02:00
< p > < / p >
2021-05-09 12:51:47 +02:00
< h2 > Le pipeline< / h2 >
2021-05-09 15:01:51 +02:00
< p > Le pipeline, symbolisée par le caractère “< strong > |< / strong > ” (< strong > AltGr< / strong > + < strong > 6< / strong > ) permet d'exécuter plusieurs commandes à la suite.< / p >
2021-05-09 12:42:51 +02:00
< p > exemple : < / p >
< pre > < code class = "language-plaintext" > get-process | Sort-Object CPU< / code > < / pre >
2021-05-09 19:59:33 +02:00
< p > Dans ce cas précis, la commande < code > Sort-Object< / code > tri les processus par utilisation de Cpu< / p >
2021-05-09 14:13:42 +02:00
< p > < / p >
2021-05-09 14:20:25 +02:00
< h2 > L' aide< / h2 >
2021-05-09 19:59:33 +02:00
< p > Sous PowerShell la commande < code > Get-Help< / code > permet d'afficher la fonction et des exemples d'une commande.< / p >
2021-05-09 14:10:07 +02:00
< pre > < code class = "language-plaintext" > get-help < la commande> < / code > < / pre >
2021-05-09 14:18:16 +02:00
< p > Mais avant d'utiliser cette commande il faut faire une mise à jour de l'aide de PowerShell avec la commande< / p >
< pre > < code class = "language-plaintext" > update-help< / code > < / pre >
2021-05-09 15:41:59 +02:00
< p > cette commande permet d'avoir une aide manière très générale si on souhaite obtenir plus d'information on peut ajouter l'option< code > -detailed< / code > < / p >
2021-05-09 14:18:16 +02:00
< pre > < code class = "language-plaintext" > get-help < la commande> -detailed< / code > < / pre >
2021-05-09 15:05:33 +02:00
< p > On peut aussi lister des exemples d'utilisation d'une commande avec l'option < code > -examples< / code > < / p >
2021-05-09 14:10:07 +02:00
< pre > < code class = "language-plaintext" > get-help < la commande> -examples< / code > < / pre >
2021-05-09 19:59:33 +02:00
< p > Il arrive parfois que l'aide renvoyée sous PowerShell ne soit pas complète malgré un < code > Update-Help.< / code > < / p >
2021-05-09 15:07:20 +02:00
< p > Pour cela il y a possibilité d'aller consulter directement l'aide en ligne avec l'option< code > -online < / code > < / p >
2021-05-09 14:10:07 +02:00
< pre > < code class = "language-plaintext" > get-help < la commande> -online< / code > < / pre >
2021-05-09 15:41:59 +02:00
< p > < / p >
2021-05-09 19:13:44 +02:00
< p > Si vous voulez de l'aide sur la syntaxe d'une commande, PowerShell indique par “< strong > [ ]< / strong > ” si le paramètre est obligatoire.< / p >
2021-05-09 19:59:33 +02:00
< p > par exemple si vous voulez de l'aide sur la syntaxe de commande < code > Get-ChildItem< / code > < / p >
< pre > < code class = "language-plaintext" > Get-Help Get-ChildItem< / code > < / pre >
2021-05-09 15:41:59 +02:00
< p > on peut constater dans la capture que certains paramètres sont obligatoires.< / p >
2021-05-09 15:59:16 +02:00
< figure class = "image image_resized" style = "width:88.82%;" > < img src = "/capture4.png" > < / figure >
2021-05-09 15:41:59 +02:00
< p > < / p >
< p > < / p >
2021-05-09 19:59:33 +02:00
< p > La commande < code > Get-Help< / code > permet également de rechercher une commande si, par exemple, vous souhaitez trouver une commande qui gère les services.< / p >
< pre > < code class = "language-plaintext" > Get-Help service< / code > < / pre >
2021-05-09 14:51:12 +02:00
< p > voici ce que renvoie la commande, on peut voir les commandes qui contiennent le mot service.< / p >
2021-05-09 15:02:11 +02:00
< figure class = "image image_resized" style = "width:86.32%;" > < img src = "/capture1.png" > < / figure >
2021-05-09 14:13:42 +02:00
< p > < / p >
2021-05-09 15:18:19 +02:00
< p > Une autre fonction de l'aide permet d'avoir des informations sur un sujet précis.< / p >
2021-05-09 19:41:17 +02:00
< p > pour lister ces sujets utilisez l'option< code > about_*< / code > < / p >
2021-05-09 19:59:33 +02:00
< pre > < code class = "language-plaintext" > Get-Help about_*< / code > < / pre >
2021-05-09 19:13:44 +02:00
< p > Par exemple, si vous voulez de l'aide au sujet de pipeline< / p >
2021-05-09 19:59:33 +02:00
< pre > < code class = "language-plaintext" > Get-Help about_pipeline< / code > < / pre >
2021-05-09 15:18:19 +02:00
< p > voici ce que renvoie la commande< / p >
2021-05-09 15:59:16 +02:00
< figure class = "image image_resized" style = "width:84.46%;" > < img src = "/capture3.png" > < / figure >
2021-05-09 15:19:21 +02:00
< p > < / p >
2021-05-09 16:02:48 +02:00
< h2 > Les providers< / h2 >
2021-05-09 15:19:21 +02:00
< p > < / p >
2021-05-09 17:30:02 +02:00
< p > Dans PowerShell, les providers permettent d'accéder par exemple à la base de registre, aux fichiers système à l'environnement etc…< / p >
< ul >
< li > Base de Registre {HKLM, HKCU}< / li >
< li > Alias {alias}< / li >
< li > Environnement {env}< / li >
< li > FileSystem {C,D,E,F}< / li >
< li > Function {Function}< / li >
< li > variable {Variable}< / li >
< / ul >
2021-05-09 19:05:40 +02:00
< p > pour lister l'ensemble des providers, on utilise la commande< / p >
2021-05-09 19:59:33 +02:00
< pre > < code class = "language-plaintext" > Get-psdrive< / code > < / pre >
2021-05-09 19:05:40 +02:00
< p > L'avantage c'est que vous pouvez parcourir ces éléments comme si c'était un système de fichiers.< / p >
2021-05-09 19:26:09 +02:00
< p > Exemple, si vous voulez parcourir la base de registre machine il suffit de taper < code > cd hklm :< / code > et vous vous retrouvez dans la base de registre et la parcourir comme si c'était un filesystem et revenir dans votre arborescence Windows avec un < code > cd c:< / code > .< / p >
2021-05-09 19:08:03 +02:00
< figure class = "image" > < img src = "/capture9.png" > < / figure >
2021-05-09 19:05:40 +02:00
< p > Vous avez ensuite la possibilité de créer ou de consulter des entrées dans la base de registre comme si c'était un filesystem et utiliser les commandes de base < / p >
2021-05-09 19:59:33 +02:00
< p > exemple avec la commande < code > Get-ChildItem< / code > ,vous pouvez consulter toute la base de registre de votre hkey local machine< / p >
2021-05-09 18:59:45 +02:00
< figure class = "image image_resized" style = "width:74.13%;" > < img src = "/capture6.png" > < / figure >
2021-05-09 17:30:02 +02:00
< p > < / p >
2021-05-09 17:12:21 +02:00
< h2 > Création d'un menu sous Powershell< / h2 >
2021-05-08 17:25:09 +02:00
< p > Voici un exemple de menu qu'il est possible de faire avec la méthode suivante :< / p >
2021-05-09 18:59:45 +02:00
< figure class = "image image_resized" style = "width:58.46%;" > < img src = "/capture2.png" > < / figure >
2021-05-08 16:44:35 +02:00
< p > < / p >
2021-05-08 17:23:43 +02:00
< h2 > Principe de fonctionnement< / h2 >
< p > Nous avons besoin de déclarer une variable qui va servir en quelque sorte de bouton “allumé” ou “éteins” : < code > $continue = $true< / code > < / p >
< p > Avec cette variable j'utilise une boucle pour permettre de laisser en permanence l'affichage : < / p >
2021-05-08 17:29:48 +02:00
< pre > < code class = "language-plaintext" > while (true){
< le menu avec des write-host>
2021-05-08 17:23:43 +02:00
}< / code > < / pre >
2021-05-08 17:24:34 +02:00
< p > Puis une seconde variable pour stocker mon choix avec < code > $choix = read-host “faire un choix”< / code > < / p >
2021-05-09 19:34:05 +02:00
< p > Suivant l'état de ce choix le script sortira de la boucle < code > while< / code > et cela provoquera soit une action du script soit une sortie du script avec < code > switch ($choix)< / code > .< / p >
< p > Le < code > switch < / code > va permettre d'indexer les choix ,de les lister et d'exécuter les commandes.< / p >
< p > Pour sortir du script si vous faites le choix ‘ < i > x< / i > ’ le script passe la variable < code > $continue< / code > à < code > false< / code > ce qui aura pour effet d'arrêter la boucle< code > while< / code > .< / p >
2021-05-09 19:59:33 +02:00
< p > La commande < code > default < / code > permet de renvoyer un message d'avertissement si vous rentrez un choix qui n'est pas dans le menu.< / p >
2021-05-08 16:42:09 +02:00
< p > < / p >
2021-05-08 17:26:10 +02:00
< h2 > Exemple< / h2 >
2021-05-08 17:23:43 +02:00
< pre > < code class = "language-plaintext" > $continue = $true
2021-05-08 17:29:48 +02:00
while (continue){
write-host “----------------------MON TITRE -----------------------”
write-host “1. mon action 1”
2021-05-09 16:31:40 +02:00
write-host "2. mon action 2"
2021-05-08 17:29:48 +02:00
write-host "x. exit"
write-host"-------------------------------------------------------------------"
2021-05-08 17:38:33 +02:00
$choix = read-host “faire un choix :”
2021-05-08 17:29:48 +02:00
switch ($choix){
2021-05-08 17:35:33 +02:00
1{commande de mon action 1}
2{commande de mon action 2}
2021-05-08 17:29:48 +02:00
‘ x’ {$continue= $false}
default {Write-Host "Choix invalide"-ForegroundColor Red}
}
}
< / code > < / pre >
2021-05-08 17:18:22 +02:00
< p > < / p >