Inside Out - Blog CyberSécurité Blog   /  

Scripts PowerShell : tutoriel destiné aux débutant(e)s

Scripts PowerShell : tutoriel destiné aux débutant(e)s

Windows PowerShell est un outil puissant destiné à l'automatisation des tâches et à la simplification de la configuration. Il peut être utilisé pour automatiser presque toutes les tâches de l'écosystème Windows, y compris Active Directory et Exchange. Il n'est pas étonnant qu'il soit devenu un outil populaire parmi les administrateurs système et les utilisateurs expérimentés de Windows.

Dans notre tutoriel PowerShell, vous avez découvert comment utiliser certains des outils PowerShell les plus utiles. Passons à l'étape suivante : utiliser ces outils dans des scripts pouvant être exécutés en un seul clic. Ce tutoriel sur les scripts PowerShell décrit la rédaction et l'exécution de scripts de base dans PowerShell, ce qui vous permettra à terme de gagner un temps considérable. 

Obtenir le cours vidéo gratuit sur PowerShell et Active Directory

Qu'est-ce que le langage PowerShell ?

Le langage PowerShell est une syntaxe de programmation propriétaire générale développée par Microsoft. Son objectif principal est de permettre aux administrateurs système d'automatiser des actions et des configurations. Ce langage est basé sur des normes orientées objet, mais il ne peut être utilisé que dans les environnements Windows. Il fait partie du .NET Framework. Le code sous-jacent utilisé dans ses fonctions est généralement le langage C#, mais la connaissance de ce langage n'est pas un prérequis pour apprendre comment utiliser PowerShell. Le langage qui se rapproche le plus de PowerShell est Perl, un langage utilisé dans des scénarios similaires sous Linux.

Chaque fonction unique du langage PowerShell est désignée par le terme cmdlet. Une cmdlet est composée d'un ou plusieurs ensembles d'actions, et elle est capable de renvoyer un objet .NET. Certaines des cmdlets les plus basiques, préconfigurées avec PowerShell, servent à naviguer dans la structure des dossiers et de déplacer ou copier des fichiers.

Qu'est-ce que PowerShell ISE ?

Vous pouvez écrire de nouvelles fonctions cmdlet dans tous les éditeurs de texte ou outils de traitement de texte. Cependant, les dernières versions du système d'exploitation Windows incluent l'outil PowerShell ISE (Integrated Scripting Environment), qui rend la rédaction de scripts encore plus simple et plus efficace.

À première vue, PowerShell ISE ressemble à une fenêtre d'invite de commandes classique. Toutefois, cet outil offre beaucoup plus de fonctionnalités et de support pour l'écriture de code. PowerShell ISE fournit une liste exhaustive qui contient l'ensemble des modules et cmdlets courants dont les administrateurs système peuvent avoir besoin. Lorsque vous serez prêt à écrire vos propres fonctions cmdlet, l'outil de débogage intégré à PowerShell ISE vous permettra de tester votre code, d'identifier les bugs ou les problèmes, puis de les corriger. Tout comme les autres environnements de codage, PowerShell ISE est hautement personnalisable. Les utilisateurs peuvent choisir le modèle de couleurs, la police et le thème qu'ils souhaitent utiliser pour l'écriture de scripts. Les scripts créés dans cet environnement porteront l'extension de fichier.psi, dont l'exécution n'est possible que dans les environnements PowerShell.

Le langage de script de PowerShell vous sera familier si vous êtes habitué à l'Invite de commandes Windows. Les objets et pipelines de données fonctionnent de manière similaire, tout comme le ping :

Scripts PowerShell pour débutant(e)s : capture d'écran du ping

Cependant, la syntaxe utilisée dans PowerShell est dans la plupart des cas beaucoup plus simple à lire que celle des commandes exécutées dans l'Invite de commandes.

Utilisations et fonctionnalités de Windows PowerShell

Scripts PowerShell pour débutant(e)s : illustration des capacités de PowerShell

Windows PowerShell peut être utilisé dans un large éventail d'applications. Mais pour les débutants, l'utilité principale des scripts PowerShell concerne l'automatisation des systèmes :

  • Travailler avec des lots de fichiers, que ce soit pour automatiser des sauvegardes ou pour contrôler l'accès à un grand nombre de fichiers à la fois.
  • Les scripts PowerShell s'avèrent également très utiles pour l'ajout et la suppression d'utilisateurs. Avec un script soigneux, vous pouvez automatiser l'ajout de lecteurs réseau, la mise à jour des logiciels de sécurité et l'octroi d'un accès aux fichiers partagés aux nouveaux utilisateurs.
  • Plusieurs fonctionnalités clés de PowerShell vous aideront à effectuer ces tâches, notamment les cmdlets et les alias (que nous allons aborder juste après).

Lancer PowerShell

Sous Windows 10, le champ de recherche est l'un des moyens les plus rapides de lancer PowerShell. Dans le champ de recherche de la barre des tâches, saisissez « powershell ». Ensuite, cliquez ou appuyez sur le résultat « Windows PowerShell ».

Pour exécuter PowerShell en tant qu'administrateur, cliquez avec le bouton droit de la souris (si vous utilisez un écran tactile, appuyez longuement) sur le résultat de la recherche PowerShell, puis cliquez ou appuyez sur « Exécuter en tant qu'administrateur ».

Il existe bien d'autres manières de lancer la console PowerShell, mais c'est une bonne méthode pour commencer.

Fonctionnalités de base de PowerShell

Si vous débutez avec PowerShell, consultez notre tutoriel avant de lire ce guide sur les scripts PowerShell. Vous y trouverez la description de tous les outils élémentaires que vous aurez à utiliser dans PowerShell, comme les cmdlets, les alias, les commandes d'aide et les pipelines.

Une fois les commandes de base maîtrisées, vous pourrez commencer à rédiger des scripts. À mesure que vos compétences se développeront, vous pourrez consulter nos guides sur les options d'entrée de PowerShell, ainsi que les ressources répertoriées à la fin de cet article.

Image des principes de base des scripts PowerShell pour débutant(e)s, comprenant les cmdlets, les alias, les commandes d'aide, les tubes et les scripts

Avant d'exécuter des scripts PowerShell

Les scripts PowerShell, comme ceux que nous allons créer pendant ce tutoriel, sont enregistrés dans des fichiers .ps1. Par défaut, Windows ne vous permet pas d'exécuter ces scripts par un simple double-clic sur le fichier, car des scripts malveillants (ou mal conçus) peuvent accidentellement endommager votre système. 

Par conséquent, pour exécuter un script PowerShell, cliquez avec le bouton droit de la souris sur le fichier .ps1, puis sélectionnez « Exécuter avec PowerShell ».

Si c'est la première fois que vous utilisez un script PowerShell, il est possible que cette action n'aboutisse pas. En effet, le système applique une stratégie globale qui bloque l'exécution de ces fichiers. Exécutez cette commande dans PowerShell :

Get-ExecutionPolicy

Vous obtiendrez les résultats suivants :

  • Restricted : aucun script ne sera exécuté. Il s'agit du paramétrage par défaut de Windows ; vous devez donc le modifier. 
  • AllSigned : vous pouvez uniquement exécuter des scripts signés par un développeur de confiance. Vous serez invité à confirmer votre choix avant d'exécuter un script, quel qu'il soit.
  • RemoteSigned : vous pouvez exécuter vos propres scripts et ceux signés par un développeur de confiance. 
  • Unrestricted : vous pouvez exécuter n'importe quel script. Pour des raisons évidentes, il est déconseillé d'utiliser cette option.

Pour commencer à utiliser des scripts PowerShell, vous devez modifier ce paramètre de stratégie. Vous devez lui attribuer la valeur « RemoteSigned », en exécutant la commande suivante directement dans PowerShell.

Set-ExecutionPolicy RemoteSigned

Vous êtes prêt.

Comment trouver des commandes PowerShell

Les utilisateurs aiment PowerShell parce que c'est un outil puissant. Mais c'est sa complexité qui lui donne une telle puissance. Il n'est simplement pas possible ni pratique pour qui que ce soit de retenir l'ensemble des commandes, cmdlets, options, filtres et autres modes de communication avec PowerShell.

Heureusement, l'éditeur intègre de nombreux outils pour vous aider.

Saisie semi-automatique

Il est inutile de mémoriser les différentes commandes ou leur orthographe exacte. Tapez get-c dans l'éditeur et appuyez sur la touche TABULATION. Vous pourrez parcourir toutes les commandes débutant par votre saisie en cours. Cette méthode fonctionne dans toutes les sections de la commande que vous tentez d'appeler, son nom (comme illustré ci-dessous), mais également les options et les chemins utilisés pour obtenir le résultat souhaité.

Scripts PowerShell pour débutant(e)s : GIF de get-command

Get-Command

Si la saisie semi-automatique fonctionne bien, comment faire si vous ne connaissez pas le nom de la commande recherchée ? Dans ce cas, vous pouvez utiliser une commande pour en trouver d'autres

Get-Command 

Lorsque vous recherchez des commandes, n'oubliez pas la syntaxe : VERBE-NOM. En général, les verbes sont Get, Set, Add, Clear, Write et Read, et les noms des éléments comme les fichiers, serveurs ou autres éléments de votre réseau et de vos applications.

Get-Command est un outil d'exploration des commandes disponibles sur votre système.

Scripts PowerShell pour débutant(e)s : capture d'écran de get-command

Syntaxe des commandes PowerShell

On a déjà décrit le langage Perl comme du « bruit de ligne exécutable », un outil extrêmement utile avec une syntaxe très opaque associée à une courbe d'apprentissage élevée en conséquence. 

Sans atteindre ce niveau, l'Invite de commandes Windows n'en est pas très éloignée. Prenons comme exemple la recherche de tous les éléments d'un répertoire dont le nom commencerait par la chaîne « Foo ».

CMD : FOR /D /r %G in (“Foo*”) DO @Echo %G

  • FOR et DO indiquent qu'il s'agit d'une boucle.
  • L'option /D indique qu'il faut effectuer la recherche dans les répertoires.
  • L'option /r indique que les fichiers sont rootés sur le chemin.
  • Le schéma qui définit l'ensemble des fichiers de la boucle est désigné avec « in ».
  • @Echo indique au script d'écrire le résultat de chaque boucle.
  • %G est le « paramètre implicite » et cette lettre a été choisie parce que les développeurs avaient déjà utilisé les lettres de chemin a, d, f, n, p, s, t et x. Commencer par le G est la méthode traditionnelle, car c'est elle qui vous donne le plus grand ensemble de lettres non utilisées pour les variables renvoyées (G, H, I, J, K, L, M). En d'autres termes, c'est un vilain hack.

Voici l'équivalent dans PowerShell :

PowerShell : Get-ChildItem -Path C:\Example -Filter ‘Foo*’

Le résultat est le même, mais même dans cet exemple simple, il est beaucoup plus facile de comprendre ce qu'il se passe. La fonction de chaque élément de la commande et la manière de les modifier sautent immédiatement aux yeux. Le seul élément moins évident à comprendre, c'est le caractère générique * (présent dans les deux exemples). Il indique que le schéma utilisé pour trouver les éléments recherchés doit commencer par « Foo » et peut se terminer par n'importe quoi d'autre. 

Et c'est de mieux en mieux. Imaginons que vous souhaitiez savoir comment identifier simplement les fichiers (et non les répertoires) dans le chemin ? Vous pourriez rechercher les documents, aller sur Google et essayer de trier tout cela avec une ligne de commande, ou dans PowerShell, taper « - » et appuyer sur la touche TABULATION, pour parcourir les options jusqu'à trouver la solution évidente.

Scripts PowerShell pour débutant(e)s : GIF de get-childitem

Longue chaîne ou propriétés d'objet

Les serveurs sont inutiles s'ils ne sont pas en ligne. C'est pourquoi nous nous obstinons à nous prendre pour des opérateurs de sonar dans un sous-marin et à les pinger (oui, ce terme vient de là). 

Même si le résultat du ping est utile (et que vous pouvez utiliser cette méthode dans PowerShell), au bout du compte, le résultat est juste une longue chaîne, une série de chiffres et de lettres ininterrompue. 

PowerShell propose une commande analogue au ping, mais qui renvoie des données structurées, pour une utilisation plus facile. Il s'agit de la commande Test-Connection. 

Voici le résultat du ping d'un serveur (nommé « DC » sur le réseau local) et la sortie Test-Connection équivalente.

Scripts PowerShell pour débutant(e)s : capture d'écran de la sortie Test-Connection

Mis à part le fait que le résultat est plus lisible, ce qui n'est pas négligeable, vous pouvez maintenant transmettre ces informations à une autre commande, les incorporer dans un utilitaire plus important (ce qui est l'objectif général de ce cours) ou simplement les modifier pour qu'elles soient plus logiques. 

Comment exécuter un script PowerShell

Il existe deux méthodes principales d'écriture de script PowerShell :

  1. La première, que vous connaissez si vous avez déjà utilisé la ligne de commande Windows, consiste à rédiger les scripts directement dans Notepad. Par exemple, ouvrez un nouveau fichier Notepad, et écrivez 

Write-Host “Hello World!”

Enregistrez ensuite ce fichier sous le nom FirstScript.ps1.

Vous pouvez appeler le script à partir de PowerShell à l'aide de la commande suivante :

& "X:\FirstScript.ps1"

Le résultat s'affiche dans PowerShell.

  1. La seconde méthode, bien plus puissante pour la création de scripts PowerShell, consiste à utiliser PowerShell Integrated Scripting Environment (ISE). Avec ISE, vous pouvez exécuter des scripts et les déboguer dans un environnement d'interface graphique. 

ISE propose la coloration syntaxique, l'édition multiligne, la saisie automatique via la touche TAB, l'exécution sélective et bien d'autres fonctionnalités encore. L'environnement vous permet même d'ouvrir plusieurs fenêtres de script à la fois, ce qui peut être utile lorsque des scripts en appellent d'autres.

Même si cela peut sembler exagéré, cela vaut la peine de commencer à travailler dans ISE dès le départ. Ainsi, vous pourrez vous y habituer avant de commencer à écrire des scripts plus complexes. 

Exemples de scripts PowerShell de base

Vous pouvez à présent commencer à rédiger des scripts PowerShell. Découvrons ce processus étape par étape.

Exemple de script 1 : obtenir la date

Commençons par un script simple. Dans ISE ou Notepad, ouvrez un nouveau fichier. Saisissez :

Write-Host get-date

Enregistrez ensuite ce fichier sous le nom GetDate.ps1.

Vous pouvez appeler le script à partir de PowerShell à l'aide de la commande suivante :

& "C:\GetDate.ps1"

Le résultat s'affiche dans PowerShell. Simple, n'est-ce pas ?

Scripts PowerShell pour débutant(e)s : capture d'écran de get-date

Exemple de script 2 : forcer l'arrêt d'un processus

Si un service Windows en cours d'exécution se bloque, vous pouvez utiliser un script PowerShell pour l'arrêter. Imaginons par exemple que mon entreprise utilise Lync pour ses communications professionnelles, et que l'application se bloque sans arrêt. Son ID de processus est 9212. Je peux arrêter Lync à l'aide d'un script.

Scripts PowerShell pour débutant(e)s : capture d'écran de l'arrêt forcé d'un processus

Pour ce faire, créez un fichier de script en utilisant la méthode que nous venons de voir. Cette fois, saisissez :

stop-process 9212

ou

stop-process -processname lync

Enregistrez le fichier sous le nom StopLync.ps1. Vous pourrez ensuite appeler le script à l'aide de la commande suivante :

& "X:\StopLync.ps1"

Ce script peut être étendu pour arrêter plusieurs processus à la fois. Il suffit pour cela d'ajouter des commandes du même type. Vous pouvez également rédiger un autre script si vous souhaitez démarrer automatiquement plusieurs processus à la fois :

start-process -processname [votre processus]

Cette méthode est particulièrement utile pour démarrer plusieurs processus réseau à la fois, par exemple, et que vous ne voulez pas saisir les commandes séparément.

Exemple de script 3 : vérifier l'existence d'un fichier

Imaginons que vous souhaitiez supprimer plusieurs fichiers. Il faudrait peut-être d'abord vérifier leur existence.

test-path, comme son nom le suggère, vous permet de vérifier si les éléments du chemin existent. La valeur TRUE est renvoyée si tous les éléments existent, et la valeur FALSE est renvoyée s'il en manque.

Il vous suffit de saisir :

test-Path (puis le chemin fichier)

Exemple de script 4 : configurer un VPN sur un nouvel ordinateur

Maintenant que vous avez les bases, créons un script vraiment utile. Pour les administrateurs système, l'un des principaux avantages de PowerShell est qu'il vous permet d'automatiser le processus de configuration de nouveaux ordinateurs.

Aujourd'hui, les particuliers comme les entreprises utilisent des réseaux privés virtuels comme une mesure de sécurité quasi obligatoire pour protéger les données propriétaires. Tous les nouveaux ordinateurs doivent être connectés à un VPN pendant la configuration. Même si vous pourriez les gérer manuellement un par un, PowerShell est parfait pour cela. Pour les utilisateurs qui débutent, c'est-à-dire pour bon nombre des lecteurs de ce guide, la plupart des services VPN de qualité fonctionneront pour votre environnement informatique, et nous pouvons écrire un script qui les installera et les configurera automatiquement. 

La méthode la plus simple consiste à ouvrir un nouveau fichier et de saisir la commande suivante :

Set-VpnConnection -Name "Test1" -ServerAddress "10.1.1.2" -PassThru

Vous devez définir l'adresse de votre serveur sur l'adresse de votre serveur VPN local. Avec la commande « PassThru », ce script renvoie les options de configuration du VPN. 

Enregistrez le fichier sous le nom SetVPN.ps1. Vous pourrez ensuite l'appeler comme nous l'avons fait auparavant à l'aide de la commande 

& "X:\SetVPN.ps1"

La première fois que vous appellerez cette commande, vous aurez peut-être des erreurs. Mais cela fait partie du processus d'apprentissage de l'écriture de scripts PowerShell. N'ayez crainte : si vous rencontrez une erreur, consultez le guide officiel de Microsoft concernant la commande « Set-VpnConnection » et adaptez les exemples qui y figurent à votre système.

Ponctuation PowerShell

Voici un tableau récapitulatif des signes de ponctuation PowerShell que nous avons utilisés :

Symbole Nom Fonction Exemple
$ Symbole du dollar Déclare une variable $a
= Signe égal Attribue une valeur à la variable $a=get-date
“” Guillemets Utilisez les guillemets pour afficher du texte Si $a = lundi

 

“Jour de la semaine : $a”
renverra :

Jour de la semaine : lundi

+ Signe plus Concatène $a = novembre

 

“Jour de la semaine : ”
+ $a.Dayofweek

Jour de la semaine : lundi

( ) Parenthèses Groupe pour créer un argument  (get-date).day

Ressources Windows PowerShell

Voici le top dix des derniers tutoriels :

Premiers pas avec PowerShell

  1. PowerShell pour les débutants : une bibliothèque de liens pour bien commencer, les meilleures pratiques, la syntaxe des lignes de commande et bien plus encore.
  2. Le best-seller de Don Jones, Learn Windows PowerShell in a Month of Lunches, est également disponible en vidéo. Après trois ou quatre mois de cette série de tutoriels vidéo, vous serez capable d'automatiser les tâches administratives plus rapidement que jamais. Si vous le souhaitez, l'auteur répond à des questions sur powershell.org. Vous y trouverez aussi nombre de ressources, événements et même des e-books gratuits. 
  3. Si vous passez l'examen Microsoft MCSA 70-410, ces fiches vous aideront : commandes PowerShell.
  4. PowerShell vous permet d'enchaîner plusieurs commandes sur une même ligne grâce à une technique appelée le pipelining . Cette technique simplifie considérablement les choses. Pour en savoir plus, cliquez ici

Configurer et gérer Active Directory

Gagnez encore plus de temps en apprenant à configurer et à gérer Active Directory à l'aide de PowerShell grâce à ces ressources :

  1. Utiliser PowerShell pour rechercher les comptes privilégiés dans AD
  2. Utilisez les cmdlets du module AD pour effectuer diverses tâches d'administration, de configuration et de diagnostic dans vos environnements AD DS et AD LDS. 
  3. Créez un utilitaire AD de A à Z dans ce cours vidéo PowerShell de 3 heures (profitez-en gratuitement avec le code : PSHL)

Automatiser Exchange

Avec tout le temps libre dont vous disposez, pourquoi ne pas apprendre à automatiser Exchange à l'aide de ces ressources ?

  1. Si vous êtes administrateur Exchange, assurez-vous que vous possédez ces 5 compétences 
  2. Cliquez ici pour obtenir d'autres conseils PowerShell destinés aux administrateurs Exchange. Puis faites défiler la page pour explorer les différentes ressources. 

Le mot de la fin

Nous espérons que ce tutoriel sur les scripts PowerShell pour les débutants vous a apporté tout ce dont vous avez besoin pour commencer à les utiliser. Une fois que vous maîtriserez les bases de la syntaxe PowerShell, il sera relativement facile d'utiliser des scripts : veillez simplement à bien organiser tous vos scripts et à les nommer de manière à ce que leur fonction soit évidente. Cela évitera toute confusion.

Une fois les scripts maîtrisés, l'utilisation de PowerShell est infinie. Jetez un œil à notre guide sur les scripts Active Directory, par exemple, pour avoir un avant-goût de la flexibilité que PowerShell peut vous offrir.

Je terminerai toutefois par un seul avertissement : ne vous fiez pas uniquement à PowerShell pour gérer l'accès aux données et leur sécurité. Même après être devenu(e) un(e) expert(e) en scripts PowerShell, les subtilités du RGPD et des cadres similaires rendent la gestion des données tout simplement trop complexe pour un outil aussi grossier. Au lieu de cela, vous devriez envisager de consulter un(e) expert(e) pour savoir comment gérer l'accès aux données stockées dans vos systèmes.

Nous sommes Varonis.

Depuis 2005, nous protégeons les données les plus précieuses du monde des mains de vos ennemis grâce à notre plateforme de sécurité des données, leader sur le marché.

Comment fonctionne Varonis ?