Vous êtes sur la page 1sur 22

15 commandes indispensables pour débuter

avec PowerShell
 I. Présentation
 II. PowerShell : 15 commandes indispensables
o A. Get-Command
o B. Get-Help
o C. Get-Member
o D. Get-Process
o E. Get-Service
o F. Get-PSDrive
o G. Get-Content
o H. Get-ChildItem
o I. Set-Location
o J. Get-Item
o K. New-Item
o L. Remove-Item
o M. Get-Date
o N. Test-Path
o O. Test-Connection
 III. Comment créer son premier script PowerShell ?

I. Présentation
Ces commandes sont à connaître pour débuter sereinement, car elles sont incontournables, et
par expérience, je sais qu'on les utilise fréquemment.

Je ne vais pas être exhaustif sur toutes les possibilités de chaque commande pour ne pas
rendre l'article imbuvable, le but étant de vous faire une première initiation pratique pour
chaque commande. Des liens supplémentaires seront ajoutés vers d'autres articles et vidéos
pour vous permettre d'approfondir.

II. PowerShell : 15 commandes indispensables


A. Get-Command

La commande Get-Command a pour objectif de vous aider à trouver une commande qui
correspond à vos besoins. Sans aucun paramètre, elle retourne l'intégralité des commandes
disponibles sur une machine :

Get-Command

Ce qui donne lieu à une sortie, forcément, conséquente et pas très exploitable.
Avant d'aller plus loin, un petit rappel sur la manière dont est constitué le nom d'une
commande Powershell :

<Verbe>-<Nom>

La première partie est un verbe (Get, Set, Remove, etc...) et la deuxième partie est un
nom pour désigner quelque chose (Service, Process, ADUser, ADGroup, etc.).

La commande Get-Command va permettre de rechercher une commande en filtrant par


rapport au verbe, au nom ou à l'intégralité du nom de la commande. C'est plus intéressant si
l'on affine la recherche.

Pour obtenir toutes les commandes disponibles sur votre machine et qui commencent par le
verbe "New", on utilisera :

Get-Command -Verb New


Ensuite, prenons un autre cas, par exemple, pour trouver toutes les commandes qui ont le nom
"Services", on utilisera :

Get-Command -Noun Service

Ainsi, on obtient facilement la liste des commandes qui vont permettre de manipuler les
services. Comme les verbes sont explicites, on peut facilement deviner que par exemple, la
commande Start-Service sert à démarrer un service. Quelques notions de base en anglais
pour connaître les mots de base, c'est forcément un plus...

Si l'on veut plutôt obtenir toutes les commandes qui ont le mot "service" dans le nom, on
utilisera le paramètre -Name à la place de -Noun, avec la notion de wildcard "*" :

Get-Command -Name *Service*

On peut voir dans la sortie ci-dessous que des applications sont également présentes dans les
résultats.
En fait, les paramètres -Noun, -Name et -Verb supportent le wildcard. On aurait pu conserver
-Noun sans le remplacer par -Name, ce qui donne :

Get-Command -Noun *Service*

La commande ci-dessus va donner la même sortie qu'avec -Name à l'exception qu'il n'y aura
pas les applications dans les résultats.

Il faut savoir que l'on peut toujours filtrer un peu plus les résultats. Par exemple, on peut
afficher seulement les commandes du type "Cmdlet" :

Get-Command -Name *Service* -CommandType Cmdlet


Enfin, on peut obtenir la liste de toutes les commandes d'un module spécifique. Par exemple,
toutes les commandes du module Active Directory :

Get-Command -Module ActiveDirectory

Vous l'aurez compris, le cmdlet Get-Command est très pratique pour rechercher une
commande par soi-même ! ?

B. Get-Help

Une fois que l'on a repéré la commande qui nous intéresse grâce à Get-Command ou une autre
méthode, on va en toute logique se poser la question suivante : comment s'utilise cette
commande PowerShell ? C'est là qu'intervient le cmdlet "Get-Help" puisqu'il permet
d'obtenir de l'aide.

Note : avant d'utiliser Get-Help pour la première fois, je vous recommande d'ouvrir une
console PowerShell en tant qu'administrateur et d'exécuter la commande Update-Help pour
mettre à jour l'aide locale.

Prenons l'exemple du cmdlet "Start-Service" évoqué précédemment (et choisi au hasard en


fait) :
Get-Help Start-Service

De base, la commande retourne une synthèse de l'aide. Si l'on veut obtenir des exemples
d'utilisation de la commande, nous devons faire :

Get-Help Start-Service -Examples

On remarque que la commande Start-Service dispose d'un paramètre nommé -Name. Si l'on
veut en savoir plus sur ce paramètre, on peut consulter l'aide de cette façon :

Get-Help Start-Service -Parameter Name


L'accès complet à l'aide est possible grâce au paramètre -Full où l'on aura la description de la
commande, le détail de chaque paramètre, les exemples, etc.

Get-Help Start-Service -Full

La console PowerShell peut vous rediriger directement sur la page d'aide en ligne
correspondante à la commande que vous souhaitez. Cela est possible grâce au paramètre -
Online :

Get-Help Start-Service -Online

Get-Help est une commande à connaître et personnellement, si j'ai un accès à Internet je


privilégie l'utilisation de l'aide en ligne sur le site de Microsoft.

Pour finir sur l'aide, je vous livre une dernière astuce qui consiste à utiliser la fonction "help".
Elle fonctionne sur le même principe et permet d'utiliser facilement Out-GridView pour avoir
une sortie en mode graphique.

Voyez par vous-même en essayant la commande ci-dessous :

help Start-Service -Full | Out-GridView


C. Get-Member

Pour explorer une commande, il y a le cmdlet "Get-Member" et son alias "gm" qui sont à
connaître. Cette commande va permettre d'obtenir tous les membres d'une commande, c'est-à-
dire toutes les propriétés et méthodes d'une commande.

Cette commande s'utilise de cette façon :

<commande source> | Get-Member

Ou

<commande source> | gm

La commande source sera une commande complète ou incomplète, c'est-à-dire seulement un


nom de commande ou un nom de commande avec des paramètres et valeurs. Pour que ce soit
plus parlant :

Get-Service | Get-Member
ou

Get-Service -Name wuauserv | Get-Member

Le résultat renvoyé par Get-Member pourra varier en fonction de la commande source, même
pour un même cmdlet, en fonction des paramètres utilisés.

Sur la copie d'écran ci-dessus, on peut voir une liste de méthode (actions) que l'on peut
utiliser, ainsi que des propriétés (valeurs). Par exemple, la méthode "Stop()" permettra
d'arrêter un service en utilisant Get-Service. À titre d'information, voici comment l'utiliser
pour arrêter un service :

(Get-Service -Name wuauserv).stop()

De la même manière, on peut afficher les valeurs des propriétés que l'on souhaite. Pour cela,
on peut utiliser Format-List, Format-Table ou encore Select-Object. Voici un exemple où j'ai
sélectionné quelques propriétés de Get-Service retournée par Get-Member :

Get-Service -Name wuauserv | Format-Table Status, StartType, MachineName,


DisplayName
Les commandes Get-Command et Get-Help sont très utiles pour débuter et moins par la suite
quand on maîtrise un bon nombre de commandes. Même si on les réutilise souvent,
finalement. Par contre, la commande Get-Member est utile "tout le temps" pour explorer
les méthodes et propriétés des commandes, car c'est très vaste.

D. Get-Process

Lorsqu'il s'agit de récupérer la liste des processus actifs sur une machine, on s'oriente
naturellement vers le Gestionnaire des tâches, car il affiche en temps réel la liste des
processus actifs avec différentes informations :
La commande Get-Process va permettre de faire la même chose, à l'aide de PowerShell, son
exécution sans paramètre va lister les processus actifs à l'instant t :
Dans la sortie ci-dessus, le nom des colonnes sont des alias vers d'autres noms de propriétés.
La commande Get-Member que l'on a vu précédemment permet d'obtenir cette information :

Name MemberType Definition


---- ---------- ----------
Handles AliasProperty Handles = Handlecount
Name AliasProperty Name = ProcessName
NPM AliasProperty NPM = NonpagedSystemMemorySize64
PM AliasProperty PM = PagedMemorySize64
SI AliasProperty SI = SessionId
VM AliasProperty VM = VirtualMemorySize64
WS AliasProperty WS = WorkingSet64

Pour avoir une sortie qui se rapproche réellement du Gestionnaire des tâches, et notamment
avoir le nom de l'utilisateur qui est à l'origine de l'exécution du processus, on va ajouter le
paramètre -IncludeUserName

Get-Process -IncludeUserName
La colonne WS correspond à WorkingSet, ce qui indique en fait la consommation en RAM de
ce processus, ici en Mégaoctets. Tandis que la colonne CPU indique le temps d'utilisation du
processeur.

Avec la commande initiale (sans -IncludeUserName), la valeur est en octet. Ainsi, pour
obtenir la liste de tous les processus qui consomment au minimum 100 Mo de RAM, on
utilisera la valeur "100000000".

Get-Process | Where-Object { $_.WorkingSet -ge 100000000 }

Si l'on recherche un processus spécifique en cours d'exécution, en lien avec un logiciel, par
exemple le navigateur Chrome et son processus "chrome", on peut affiner la commande :

Get-Process -Name "chrome" -IncludeUserName

Ou, tout simplement :

Get-Process -Name "chrome"

La liste des propriétés disponibles avec la commande Get-Process est très longue. On peut,
par exemple, obtenir la date de création de chaque processus grâce à la propriété StartTime.

Get-Process | Format-Table Name, StartTime


E. Get-Service

Grâce à la commande Get-Service, nous allons pouvoir récupérer des informations sur les
services présents sur la machine, ainsi que sur leur état et leur type de démarrage : utile pour
vérifier si un service est en cours d'exécution ou pour lister tous les services en cours
d'exécution. Une commande que l'on peut utiliser pour créer un script de supervision, par
exemple.

Sans paramètre, la commande va renvoyer tous les services avec plusieurs informations : le
statut, le nom du service et son nom d'affichage (tel qu'il est dans la console de gestion des
services).

Get-Service
Pour récupérer la liste de tous les services en cours d'exécution, on doit effectuer un filtre
avec Where car il n'y a pas de paramètres directement au sein de Get-Service pour réaliser ce
filtre. Le statut qui nous intéresse est "Running", car il correspond à l'état "En cours
d'exécution".

Get-Service | Where-Object {$_.status -eq "Running"}

Enfin, pour obtenir l'état d'un statut spécifique, par exemple le service "Windows Update"
(qui a pour nom wuauserv), on pourra le cibler directement :

Get-Service -Name "wuauserv"

PowerShell contient des commandes supplémentaires pour gérer les services, notamment pour
arrêter un service (Stop-Service) ou démarrer un service (Start-Service).

F. Get-PSDrive

La commande Get-PSDrive permet de récupérer des informations sur les différents lecteurs
du système. Plusieurs types de lecteurs différents sont remontés par cette commande, et il y en
a deux particulièrement utiles :

 Les lecteurs de type "FileSystem" correspondant à vos volumes montés sur votre
système, par exemple le volume "C" où Windows est installé, ou alors un lecteur
réseau connecté sur votre machine.
 Les lecteurs de type "Registry" correspondent au Registre Windows, en l'occurrence
les ruches HKCU et HKLM

Pour chaque lecteur, on obtient son nom, sa racine, ainsi que l'espace utilisé et l'espace libre
lorsqu'il s'agit d'un espace de stockage. Il suffit d'exécuter la commande sans aucun paramètre
pour obtenir cette synthèse :

Get-PSDrive

Pour obtenir des informations seulement sur les lecteurs du fournisseur (Provider)
"FileSystem", c'est-à-dire les espaces de stockage, on utilisera cette commande :

Get-PSDrive -PSProvider FileSystem

G. Get-Content

La commande Get-Content sert à récupérer le contenu d'un fichier, simplement pour


l'afficher ou pour l'exploiter dans un script complet. Son utilisation est simple puisqu'il suffit
de spécifier le nom d'un fichier à charger :

Get-Content -Path "<chemin-du-fichier>"


Get-Content -Path "C:\TEMP\Pays.txt"

La commande ci-dessus va récupérer l'intégralité du fichier.

Pour récupérer les premières lignes d'un fichier, on va utiliser le paramètre -TotalCount suivi
du nombre de lignes à récupérer, en partant du début :

Get-Content "C:\TEMP\Pays.txt" -TotalCount 5

Enfin, pour récupérer les dernières lignes d'un fichier, on va utiliser le paramètre -Tail suivi
du nombre de lignes à récupérer, en partant de la fin :

Get-Content "C:\TEMP\Pays.txt" -Tail 5


H. Get-ChildItem

La commande Get-ChildItem (et son alias gci) permet de lister le contenu d'un dossier
en PowerShell. On peut lister le contenu d'un dossier spécifique en s'arrêtant au dossier cible,
mais on peut aussi lister le contenu de façon récursive : le dossier cible ainsi que le contenu de
tout ses sous-dossiers.

Si l'on exécute la commande Get-ChildItem dans une console, le contenu du répertoire dans
lequel on se situe sera listé. Sinon, on peut préciser le chemin vers un dossier grâce à -Path :

Get-ChildItem -Path "C:\TEMP"

Pour ajouter de la récursivité (prendre en compte les sous-dossiers), nous devrons ajouter -
Recurse, comme ceci :

Get-ChildItem -Path "C:\TEMP" -Recurse

On peut aussi lister seulement les fichiers avec -File ou seulement les dossiers avec -
Directory :

Get-ChildItem -Directory

Ce cmdlet intègre trois paramètres particulièrement intéressants pour filtrer les résultats :

-Filter, -Include et -Exclude. 

Ainsi, pour récupérer la liste de tous les fichiers PDF contenus dans un dossier, nous pouvons
faire :

Get-ChildItem -Path "C:\TEMP" -Filter "*.pdf"

Dans le même esprit, on peut exclure des résultats tous les fichiers JPG :

Get-ChildItem -Exclude *.jpg

Pour filtrer sur plusieurs extensions de fichiers, je vous propose d'utiliser -Include. Il s'utilise
simplement, mais il y a une petite subtilité : il faut indiquer un wildcard à la fin du chemin
pour bien préciser que l'on filtre le contenu du dossier, sinon, le résultat sera vide à chaque
fois. Voici comment récupérer seulement les fichiers EXE et PDF :

Get-ChildItem "C:\TEMP\*" -Include *.exe,*.pdf


Enfin, sachez que Get-ChildItem sert également à lister le contenu du Registre Windows. Par
exemple, la ruche HKLM correspondante à HKEY_LOCAL_MACHINE :

Get-ChildItem -Path HKLM:\SYSTEM

I. Set-Location

Utile pour l'usage de la console PowerShell plus que pour les scripts directement, la
commande Set-Location est indispensable, car elle permet de se déplacer d'un dossier à un
autre. Autrement dit, elle correspond à la fameuse commande "cd" (Change Directory) que
l'on retrouve aussi sous Linux.

Par exemple, si l'on est dans le dossier "C:\Users" et que l'on veut se positionner dans le
dossier "C:\TEMP", on fera tout simplement :

Set-Location "C:\TEMP"

Le chemin que l'on indique sera automatiquement associé au paramètre -Path.

J. Get-Item

Get-Item est un peu dans le même esprit que Get-ChildItem sauf qu'il sert à récupérer des
informations sur un élément précis, notamment un dossier ou un fichier. Finalement, on
peut aussi lister le contenu d'un dossier courant grâce à la commande ci-dessous :

Get-Item *
Le fait d'indiquer le wildcard "*" permet de lister tous les éléments. L'idée, c'est plutôt de
cibler un fichier comme dans cet exemple avec "Teams.ps1" :

Get-Item "C:\TEMP\Teams.ps1"

Ensuite, on va lire les propriétés de cet objet, ce qui va permettre d'obtenir plein
d'informations pertinentes : nom, date de création, date de dernier accès, date de dernière
modification. Ce qui se traduit par la commande suivante :

Get-Item "C:\TEMP\Teams.ps1" | Select-Object Name, CreationTime,


LastAccessTime, LastWriteTime

Je ne veux pas aller trop loin, mais on peut coupler l'utilisation de Get-ChildItem et Get-Item
pour obtenir les mêmes informations par rapport à une liste de fichiers que l'on obtient via
Get-ChildItem. Avec un filtre sur les fichiers EXE, cela donne :

Get-ChildItem -Filter *.exe | Get-Item | Select-Object Name, CreationTime,


LastAccessTime, LastWriteTime

Même si, on peut faire la même chose avec Get-Item (comme souvent il y a plusieurs façons
de faire) :

Get-Item *.exe | Select-Object Name, CreationTime, LastAccessTime,


LastWriteTime

Pour réaliser du reporting ou de la surveillance sur des éléments, la commande Get-Item


est redoutable !
K. New-Item

La création d'un dossier ou d'un fichier passe par l'utilisation de la commande New-
Item. Cette commande sert aussi à créer des liens symboliques. Tout se joue au sein du
paramètre -ItemType, alors que le paramètre -Path sert à préciser le chemin de l'élément et -
Name son nom.

Commençons par créer un dossier nommé "POWERSHELL" dans le dossier "C:\TEMP" :

New-Item -Path "C:\TEMP\PS" -Name "POWERSHELL" -ItemType Directory

Déplaçons-nous dans ce dossier avec Set-Location (vu précédemment) et créons un nouveau


fichier TXT :

Set-Location C:\TEMP\PS\POWERSHELL
New-Item -Path . -Name "IT-Connect.txt" -ItemType File

La commande ci-dessus contient la valeur "." pour le chemin (-Path), ce qui permet de
spécifier le dossier courant. On pourrait même créer plusieurs fichiers en même temps, par
exemple un fichier "fichier1.txt" et "fichier2.txt" dans notre dossier créé précédemment :

New-Item -ItemType File -Path "C:\TEMP\PS\POWERSHELL\FICHIER1.TXT", "C:\


TEMP\PS\POWERSHELL\FICHIER2.TXT"

L. Remove-Item

À l'inverse de la commande précédente, Remove-Item sert à supprimer un élément, que


ce soit un fichier ou un dossier.

Pour supprimer un fichier, c'est tout simple, on spécifie son nom :

Remove-Item .\logiciel.exe

Pour supprimer un dossier ainsi que tout son contenu, y compris s'il a des sous-dossiers (à
manipuler avec précaution), on utilisera en complément les paramètres -Recurse et -Force :

Remove-Item "C:\TEMP\DossierCible\ -Recurse -Force

Enfin, je vous propose un dernier exemple : supprimer tous les fichiers JPG qui se trouvent
dans un dossier :

Remove-Item "C:\TEMP\PS\*" -Include *.jpg

Cette commande est souvent couplée à l'utilisation de Get-ChildItem comme avec Get-Item, et
elle sert aussi à supprimer des éléments dans le registre.

M. Get-Date

La commande Get-Date sert à récupérer la date et l'heure, sous différents formats. Très utile
dans les scripts, notamment pour la gestion de fichiers de logs, mais aussi pour comparer des
dates.
Get-Date

On peut obtenir la date sous la forme "AnnéeMoisJour" :

Get-Date -Format "yyyyMMdd"


20210319

De la même façon, en modifiant l'ordre et en ajoutant un "/" entre chaque partie :

Get-Date -Format "dd/MM/yyyy"


19/03/2021

Enfin, on pourrait inclure à la fin l'heure :

Get-Date -Format "yyyyMMdd_hhmm"


20210326_1131

Le fait d'utiliser "hh" donne l'heure sur 12 heures (am/pm) alors que "HH", en majuscules
donc, donne l'heure au format 24 heures.

Pour en savoir plus sur l'utilisation de ce cmdlet :

N. Test-Path

Le cmdlet Test-Path sert à tester l'existence d'un élément, généralement un fichier ou un


dossier. Par exemple pour tester l'existence du chemin "C:\TEMP", on exécutera :

Test-Path -Path "C:\TEMP"

La commande ne retournera pas le contenu du dossier ou ses propriétés, simplement une


valeur booléenne : vraie ou faux. Simple, mais tellement pratique !

Comme je l'explique dans l'article dédié à Test-Path (voir lien ci-dessous), on peut tester
l'existence d'un fichier et sa date de dernière modification, pour voir si elle est "plus récente
que" (NewerThan) ou "plus ancienne que" (OlderThan) en précisant une date.

O. Test-Connection

Pour finir, je souhaitais vous parler de Test-Connection : l'équivalent de l'éternelle commande


"ping", mais à la façon de PowerShell. Pour réaliser 4 pings à destination d'une machine, on
peut spécifier son adresse IP ou son nom DNS :

Test-Connection 1.1.1.1
Si l'on veut réaliser seulement 1 ping, ce qui est pratique pour simplement tester la
connectivité vers une machine, on utilisera -Count suivi du nombre de ping à réaliser :

Test-Connection 1.1.1.1 -Count 1

À l'inverse, si l'on veut que le ping soit continue et qu'il ne s'arrête pas automatiquement, on
précisera -Continuous :

Test-Connection 1.1.1.1 -Continuous

Enfin, on peut facilement tester plusieurs hôtes : il suffit de séparer les cibles par une virgule :

Test-Connection 1.1.1.1, www.google.fr -Count 1

L'outil tracert qui permet de déterminer l'itinéraire jusqu'à un hôte distant est repris par Test-
Connection. Il suffit de préciser le paramètre -Traceroute :

Test-Connection www.google.fr -Traceroute

Vous aimerez peut-être aussi