Points clés
1. Commencez par ce que vous connaissez : PowerShell exécute vos outils existants.
Ce qui surprend la plupart des utilisateurs lors de leur première utilisation de PowerShell, c’est sa grande ressemblance avec l’invite de commandes traditionnelle de Windows.
Une prise en main facile. PowerShell a été conçu pour être immédiatement accessible aux utilisateurs habitués aux interfaces en ligne de commande. Vous pouvez lancer des exécutables Windows classiques comme ipconfig.exe ou notepad.exe simplement en tapant leur nom, exactement comme dans cmd.exe. Ainsi, vous n’avez pas besoin d’abandonner vos connaissances ou outils existants pour commencer à utiliser PowerShell.
Fonctionnalités de compatibilité. PowerShell intègre des mécanismes garantissant la compatibilité avec les outils et scripts en ligne de commande traditionnels. Pour exécuter un programme dont le chemin ou le nom contient des espaces, utilisez l’opérateur d’invocation (&) avec des guillemets, par exemple & 'C:\Program Files\MyApp\app.exe'. Pour lancer un script ou un exécutable situé dans le répertoire courant, préfixez son nom par .\, comme dans .\myscript.ps1, ce qui rappelle le comportement des shells Unix et renforce la sécurité.
Une base pour progresser. Si commencer par des commandes familières est simple, la véritable puissance de PowerShell réside dans ses cmdlets natives et ses capacités de script. Cette compatibilité vous offre un point de départ confortable avant d’explorer des fonctionnalités plus avancées et orientées objet, vous permettant d’apprendre PowerShell pas à pas.
2. Adoptez le pipeline d’objets : la manipulation des données facilitée.
PowerShell transmet des objets .NET complets entre ses commandes.
Au-delà du texte. Contrairement aux shells traditionnels qui transmettent les données sous forme de texte brut, les pipelines PowerShell véhiculent des objets riches et structurés. Cela évite d’avoir recours à des outils fragiles de traitement de texte comme awk ou grep pour extraire des informations pertinentes.
Un flux de données fluide. L’opérateur pipe (|) relie les commandes en envoyant la sortie objet d’une commande directement en entrée de la suivante. Vous pouvez ainsi enchaîner des commandes simples pour réaliser efficacement des manipulations complexes. Par exemple, Get-Process | Where-Object { $_.WorkingSet -gt 100mb } | Sort-Object Name récupère les processus, les filtre selon leur consommation mémoire, puis trie les résultats par nom, tout en conservant l’intégralité des données des objets processus.
Un scripting simplifié. Travailler directement avec des objets rend le scripting beaucoup plus simple et fiable. Vous pouvez accéder aux propriétés des objets (comme .Name ou .Length) et appeler leurs méthodes (comme .Kill()) directement dans le pipeline ou dans vos scripts, exploitant pleinement les capacités des données sous-jacentes.
3. Maîtrisez variables et objets : le cœur de la puissance PowerShell.
Avec ces objets en main, PowerShell vous permet d’accéder aisément aux propriétés des objets (comme le nom ou la mémoire utilisée par un processus) et d’utiliser leurs fonctionnalités (comme les arrêter, les démarrer ou attendre leur terminaison).
Des données structurées. PowerShell repose sur le Framework .NET, ce qui signifie que les données sont manipulées sous forme d’objets structurés plutôt que de simples chaînes de texte. Ces objets encapsulent à la fois des informations (propriétés) et des actions (méthodes) relatives aux données qu’ils représentent.
Accéder aux membres des objets. Vous interagissez avec les objets via la notation pointée : $process.Id accède à la propriété Id d’un objet processus, tandis que $process.Kill() invoque la méthode Kill. Cette syntaxe cohérente s’applique que l’objet provienne d’un cmdlet, d’une classe .NET ou d’une autre source.
Les variables comme conteneurs. Les variables, identifiées par un signe dollar ($), stockent ces objets pour une utilisation ultérieure. Vous pouvez affecter la sortie de n’importe quelle commande ou pipeline à une variable, en conservant la structure et les fonctionnalités de l’objet. PowerShell propose également des variables automatiques (comme $error ou $PSVersionTable) qui fournissent des informations sur la session et l’environnement en cours.
4. Contrôlez vos scripts : logique et boucles pour automatiser.
Les instructions de boucle et de contrôle de flux ajoutent une grande polyvalence à votre boîte à outils PowerShell.
S’adapter aux données. Les instructions de contrôle de flux permettent à vos scripts de prendre des décisions et d’exécuter différentes commandes selon des conditions. Les instructions if, elseif et else offrent une exécution conditionnelle, tandis que switch propose une gestion plus claire de multiples cas, avec prise en charge des correspondances par motif et de l’entrée depuis des fichiers.
Répéter des actions. Les boucles permettent d’exécuter plusieurs fois une opération sans dupliquer le code. PowerShell propose plusieurs types de boucles :
for: exécute un bloc un nombre défini de fois.foreach: itère sur chaque élément d’une collection.while: répète un bloc tant qu’une condition est vraie.do: répète un bloc jusqu’à ce qu’une condition soit remplie (vérifiée après la première exécution).
Traitement en pipeline. Le cmdlet Foreach-Object (alias %) est particulièrement utile pour traiter les éléments au fur et à mesure qu’ils arrivent dans le pipeline, ce qui est efficace pour les grands ensembles de données. En combinant boucles et conditions, vous pouvez écrire des scripts sophistiqués capables de gérer des scénarios et des entrées variés de manière dynamique.
5. Traitez texte et chaînes : des outils puissants.
Puisque PowerShell vous permet de gérer la majorité de votre système avec une fidélité complète (grâce aux cmdlets et objets), les outils de traitement de texte peuvent se concentrer à nouveau sur les tâches spécifiques au texte.
Types de chaînes. PowerShell supporte différentes manières de définir des chaînes : les chaînes littérales (entre apostrophes '...') où le contenu est pris tel quel, et les chaînes expansibles (entre guillemets doubles "...") où les variables ($variable) et séquences d’échappement (\n, \t) sont interprétées. Les here-strings (@"..."@) permettent de définir des blocs de texte multi-lignes tout en conservant la mise en forme.
Opérateurs de manipulation. Des opérateurs puissants sont disponibles pour les tâches courantes sur le texte. L’opérateur -split divise une chaîne en tableau selon un délimiteur ou une expression régulière, tandis que -join combine les éléments d’un tableau en une seule chaîne. L’opérateur -replace effectue des substitutions, supportant aussi bien des remplacements simples que des motifs complexes en expression régulière.
Méthodes sur les chaînes. En tant qu’objets .NET, les chaînes exposent de nombreuses méthodes pour leur manipulation. Par exemple, .Length donne la longueur, .Contains() vérifie la présence d’une sous-chaîne, .IndexOf() trouve la position d’une sous-chaîne, .ToUpper() et .ToLower() convertissent la casse, et .Trim() supprime les espaces en début et fin.
6. Naviguez et gérez les fichiers : une approche cohérente.
Ce script complexe orienté programmeur se transforme en une simple commande : Get-ChildItem -Recurse | Sort-Object -Descending Length | Select -First 10
Cmdlets de base pour les fichiers. PowerShell offre un ensemble cohérent de cmdlets pour interagir avec le système de fichiers. Get-ChildItem (dir, ls) liste fichiers et dossiers, Get-Item récupère les informations d’un élément précis, New-Item crée fichiers ou dossiers, Remove-Item les supprime, et Move-Item ainsi que Rename-Item gèrent déplacement et renommage.
Filtres puissants. Ces cmdlets supportent un filtrage robuste via des jokers (*, ?, []) directement dans le paramètre -Path ou par les paramètres -Include et -Exclude. Pour un filtrage spécifique au fournisseur (comme les noms courts), le paramètre -Filter est disponible. De plus, -Attributes permet de filtrer selon les attributs des fichiers, tels que ReadOnly, Hidden ou System.
Opérations récursives. Le paramètre -Recurse permet d’agir sur les éléments des sous-répertoires, facilitant les opérations sur un arbre complet. Combiné au pipeline d’objets, cela permet des commandes puissantes et concises pour trouver, filtrer et agir sur des fichiers selon leurs propriétés, comme dans l’exemple cité pour trouver les fichiers les plus volumineux.
7. Administrez le Registre : traitez-le comme un système de fichiers.
PowerShell résout ce problème en exposant le Registre Windows comme un fournisseur de navigation : une source de données que vous parcourez et gérez exactement comme un système de fichiers.
Lecteurs du Registre. PowerShell associe les principales ruche du Registre à des lecteurs, tels que HKLM: pour HKEY_LOCAL_MACHINE et HKCU: pour HKEY_CURRENT_USER. Vous pouvez ainsi naviguer dans le Registre avec les cmdlets familiers du système de fichiers comme Set-Location (cd), Get-ChildItem (dir), Push-Location et Pop-Location.
Gestion des clés et valeurs. Les clés du Registre sont traitées comme des éléments, et leurs valeurs comme des propriétés de ces éléments. Vous utilisez Get-ItemProperty (gp) pour consulter les valeurs, Set-ItemProperty (sp) pour les modifier, New-ItemProperty pour en créer de nouvelles, et Remove-ItemProperty pour les supprimer.
Sécurité transactionnelle. Pour des modifications liées du Registre, PowerShell prend en charge les transactions. En utilisant Start-Transaction et en appliquant les changements avec le paramètre -UseTransaction, vous garantissez que toutes les modifications sont validées (Complete-Transaction) ou annulées (Undo-Transaction), évitant ainsi des états incohérents.
8. Travaillez avec les journaux d’événements : une surveillance centralisée.
En s’appuyant sur le système d’événements PowerShell, vous pouvez écrire des scripts qui réagissent rapidement à un système en constante évolution.
Accès aux journaux. PowerShell propose Get-EventLog pour accéder aux journaux classiques de Windows (Application, Système, Sécurité, etc.) et Get-WinEvent pour les journaux plus récents (journaux d’application et de services) à partir de Windows Vista. Les commandes Get-EventLog -List ou Get-WinEvent -ListLog * listent les journaux disponibles.
Filtrage et analyse. Les entrées des journaux sont retournées sous forme d’objets, permettant un filtrage puissant avec Where-Object selon des propriétés comme Message, EntryType, EventID ou TimeGenerated. Get-WinEvent offre des options de filtrage plus efficaces comme -FilterHashtable et -FilterXPath pour des requêtes complexes. Group-Object aide à analyser la fréquence des événements.
Tâches de gestion. Au-delà de la consultation, les cmdlets PowerShell permettent une gestion complète des journaux d’événements. Write-EventLog ajoute des entrées personnalisées, Clear-EventLog vide un journal, et Limit-EventLog configure la taille et la politique de rétention. Vous pouvez aussi exporter les journaux avec wevtutil.exe ou Export-CliXml pour sauvegarde ou analyse hors ligne.
9. Gérez processus et services : contrôlez les applications en cours.
Puisque le cmdlet Get-Process de PowerShell retourne des informations sous forme d’objets .NET très structurés, le traitement fragile du texte appartient au passé : Get-Process | Where-Object { $_.WorkingSet -gt 100mb } | Stop-Process -WhatIf
Contrôle des processus. Le cmdlet Get-Process (gps) récupère les processus en cours sous forme d’objets riches, donnant accès à des propriétés comme Name, Id, WorkingSet ou StartTime. Cette sortie orientée objet permet un filtrage et un tri précis sans parsing de texte. Stop-Process (kill) termine les processus, et Wait-Process suspend l’exécution d’un script jusqu’à la fin d’un processus.
Gestion des services. De même, Get-Service récupère les services système sous forme d’objets avec des propriétés telles que Name, DisplayName et Status. Vous pouvez filtrer les services (par exemple, Get-Service | Where-Object {$_.Status -eq 'Running'}) et gérer leur cycle de vie.
Actions sur les services. Des cmdlets dédiés permettent d’agir sur les services :
[La réponse s’interrompt ici.]
Résumé des avis
Les lecteurs considèrent Windows PowerShell Cookbook comme une référence complète destinée aux développeurs expérimentés. Toutefois, les débutants peuvent se sentir dépassés en raison de son volume et de sa profondeur. Un critique le décrit comme « boire à la lance à incendie » et estime qu’il convient mieux à ceux qui maîtrisent déjà les bases de PowerShell. Un autre souligne qu’il est utile en tant qu’ouvrage de référence physique lors de l’apprentissage, mais qu’il n’est pas idéal pour une lecture occasionnelle. Le contenu abondant du livre est à la fois salué pour son exhaustivité et critiqué pour sa complexité, qui peut décourager les novices.