Guide de base Microsoft PowerShell – Serveur d’impression
PowerShell peut être le meilleur ami d'un administrateur informatique s'il sait s'en servir.
Sommaire
Qu'est-ce que PowerShell?
Microsoft PowerShell est un puissant outil d'administration qui peut notamment vous aider à automatiser des tâches pour votre ordinateur et votre réseau. PowerShell contient des éléments d'invite de commande et repose sur le framework .NET. Il a longtemps été l'outil de prédilection des administrateurs informatiques pour la gestion de grands réseaux.
Apprendre à utiliser PowerShell vous permettra de simplifier de nombreuses tâches fastidieuses et quotidiennes. Vous pourrez également apporter des modifications à l'ensemble du système sur l'ensemble de votre réseau, de sorte que vous n'ayez pas à effectuer de réglages individuels sur chaque serveur. Ces derniers temps, il est devenu un élément essentiel de la gestion d’un environnement de cloud hybride.
PowerShell vous fait gagner beaucoup de temps et a de nombreuses autres utilisations qui vous rendent plus productif et permettent à votre réseau de fonctionner efficacement. Parmi les tâches de base que vous pouvez faire, vous pouvez planifier des mises à jour quotidiennes sur les systèmes, générer des rapports sur les processus en cours, des services de cycle et bien d’autres choses encore. Il est vrai que bon nombre de ces tâches peuvent être effectuées via une interface graphique. Toutefois, l'objectif de PowerShell est de les exécuter plus rapidement.
Si vous avez une tâche de maintenance de routine qui nécessite plusieurs minutes de clé et de configuration, vous pouvez scripter cette même fonction dans une seule commande que vous nommez sur PowerShell. Ainsi, la prochaine fois, vous extrayez ce script sous le nom sous lequel vous l'avez enregistré et il s'exécutera en arrière-plan. Maîtriser la logique de script de PowerShell, comprendre le fonctionnement de son moteur d'objet et de moteur de variable et le déployer intelligemment sur votre réseau vous fera vous demander pourquoi vous êtes resté aussi longtemps sans l'utiliser.
Ce guide vous expliquera les bases de PowerShell, que les professionnels de l'informatique débutants pourront facilement apprendre, en particulier si vous connaissez déjà l'invite de commande de Windows. Nous verrons comment utiliser les outils et les commandes de base, comment manipuler des fichiers et des dossiers, comprendre les objets, utiliser des variables et gérer des serveurs distants.
Comme pour la plupart des choses de la vie, prendre le temps d'apprendre et de bien comprendre les bases vous évitera des maux de tête et vous aidera à comprendre des concepts plus avancés tout en approfondissant votre connaissance du monde des commandes PowerShell. Les trois concepts introduits dans cette section sont fondamentaux pour comprendre les concepts clés qui constituent la base de PowerShell.
Outils PowerShell
PowerShell est installé par défaut dans Windows 10, Windows 7, Windows Server 2008 R2 et les versions ultérieures de Windows. Les versions les plus récentes de PowerShell introduisent de nouvelles fonctionnalités et des "applets de commande" (terme utilisé par Microsoft pour les commandes PowerShell – prononcé "command-lets") et sont installées à l'aide de la version correspondante de Windows Management Framework (WMF). Actuellement, WMF (?) 5.1 est la dernière version recommandée pour une utilisation en production. Dans certains cas, plusieurs nouvelles fonctionnalités dépendent du système d'exploitation en plus de la version WMF. Par exemple, Windows 8 et Windows Server 2012 prennent en charge la cmdlet Test-NetConnection, ce qui vous permet de tester la connectivité à un port TCP / IP spécifique, mais cette cmdlet n'est pas disponible dans Windows 7, même si vous exécutez la dernière version de WMF.
Sur la plupart des systèmes Windows, les utilisateurs auront accès à deux environnements PowerShell, la console PowerShell et le PowerShell ISE (Integrated Scripting Environment). La console PowerShell apparaît comme la ligne de commande traditionnelle, mais avec tout le poids de PowerShell derrière elle. Les noms de variable, les boucles, le remplissage par tabulation et la tuyauterie sont tous disponibles à partir de la console PowerShell. Pour une utilisation plus approfondie (telle que la génération de script), PowerShell ISE offre la complétion par tabulation, la mise en surbrillance du code et la fonctionnalité de complétion du code Intellisense de Microsoft pour vous aider à créer et à tester votre code PowerShell. PowerShell ISE vous permet également de travailler avec plusieurs scripts PowerShell simultanément à l'aide de la navigation par onglets.
Applets de commande PowerShell
Les cmdlets constituent la base des commandes PowerShell. Microsoft a défini plusieurs stratégies de conception lors de la conception des applets de commande PowerShell. Tout d'abord, vous pouvez facilement inférer les noms des applets de commande ou, à tout le moins, les rendre faciles à découvrir. Les commandes ou applets de commande PowerShell sont également conçues pour être faciles à utiliser avec une syntaxe normalisée, ce qui les rend faciles à utiliser de manière interactive à partir de la ligne de commande ou pour créer des scripts puissants.
Les applets de commande PowerShell utilisent le format Verb-Noun comme dans Get-Service, Stop-Service ou Import-Csv. La partie verbale du nom de l'applet de commande indique l'action à effectuer sur le nom. En règle générale, les applets de commande utilisées pour demander des informations utilisent le verbe Get, comme c'est le cas avec Get-Process ou Get-Content. Les commandes utilisées pour modifier quelque chose commencent généralement par le verbe Set, tandis que celles qui ajoutent une nouvelle entité à quelque chose commencent souvent par Add ou New. Dans de nombreux cas, ces combinaisons de noms de verbe peuvent être devinées ou prédites en raison de la convention de dénomination standard.
La dénomination d'applets de commande standardisée n'est pas le seul aspect de PowerShell conçu pour améliorer la convivialité en ligne de commande. Les paramètres couramment utilisés dans PowerShell utilisent également des noms standard. Le paramètre -ComputerName, qui permet d'exécuter une applet de commande sur un ou plusieurs ordinateurs distants, en est un exemple. De même, -Credential est utilisé pour fournir un objet d'informations d'identification, contenant les informations d'identification de connexion d'un utilisateur, afin d'exécuter la commande en tant qu'utilisateur spécifique.
Modules PowerShell
Lors de l'utilisation de PowerShell via la console, des alias peuvent être utilisés à la fois pour les applets de commande et les paramètres afin de préserver les frappes au clavier et de réduire la longueur totale d'une commande (avantage à ne pas négliger lorsque les commandes sont acheminées ensemble). Les alias de cmdlet n'utilisent pas toujours une convention d'appellation standard, mais ils reflètent souvent les utilitaires de ligne de commande traditionnels.
Dans PowerShell, les alias DIR, CD, DEL et CLS correspondent respectivement aux cmdlets Get-ChildItem, Set-Location, Remove-Item et Clear-Host. Les alias de paramètre peuvent fonctionner de deux manières: ils peuvent utiliser un alias prédéfini défini par la cmdlet ou un alias en entrant suffisamment de caractères pour obtenir une correspondance unique entre les paramètres pris en charge par la cmdlet.
Gestion des fichiers et des dossiers
Quel que soit votre créneau dans le secteur informatique, il est probable que votre quotidien implique la gestion de fichiers et de dossiers d'une manière ou d'une autre. Qu'il s'agisse de déplacer des dossiers vers un autre emplacement sur un serveur, d'archiver des fichiers journaux ou de rechercher des fichiers volumineux; presque tous les administrateurs système passent une partie de leur journée à gérer des fichiers et des dossiers. Dans les cas où des tâches répétitives sont répétées sur plusieurs fichiers ou si le même ensemble de tâches est exécuté à plusieurs reprises, l'automatisation via PowerShell peut vous faire gagner beaucoup de temps.
Recherche de fichiers et de dossiers L’un des premiers outils en ligne de commande que les administrateurs ont appris à l’époque des ordinateurs était le dir commander. Pour ceux qui découvrent le jeu, dir listera les fichiers et les dossiers contenus dans le répertoire spécifié. PowerShell propose une commande similaire sous la forme de Get-ChildItem cmdlet. Get-ChildItem vous permet de créer rapidement une liste des fichiers dans un répertoire de manière à pouvoir ensuite agir sur ces fichiers, soit via une commande piped, soit en affectant le résultat à une variable.
À la base, Get-ChildItem peut être utilisé simplement en fournissant un chemin, soit par le pipeline, en utilisant le -Chemin paramètre, ou immédiatement après le nom de la cmdlet. Pour ajuster la réponse renvoyée par Get-ChildItem, Il est essentiel d'examiner certains des paramètres fournis par la cmdlet.
le -Filtre paramètre est un moyen de rechercher des fichiers. Par défaut, le Get-ChildItem La cmdlet ne renvoie que les enfants directs du répertoire cible. Cette fonctionnalité peut être étendue en utilisant le -Recours switch, qui recherche récursivement les répertoires contenus dans le dossier en cours.
Dans PowerShell 4.0, Get-ChildItem ajoute la possibilité de limiter le résultat à un fichier ou à un dossier en utilisant le -Fichier ou -Annuaire commutateurs. Les versions précédentes de PowerShell devaient transmettre le résultat à Où-objet, filtrant sur le PSIsContainer propriété pour prendre cette décision. Un exemple des deux techniques utilisées pour renvoyer les dossiers contenus dans C: utilisateurs est montré ici:
Get-ChildItem C: Utilisateurs -Directory Get-ChildItem C: Utilisateurs | Where-Object $ _. PSIsContainer –eq $ true
Afin de découvrir les fichiers cachés ou système, le -Obliger commutateur doit être utilisé. Get-ChildItem dans PowerShell 4.0 et versions ultérieures peuvent également être utilisés pour renvoyer uniquement les fichiers masqués, en lecture seule, ou les fichiers système à l'aide de la commande -Caché, -Lecture seulement, et -Système commutateurs respectivement. La même fonctionnalité peut être obtenue dans les versions précédentes en filtrant la propriété Mode à l'aide de Où-objet:
Get-ChildItem C: Utilisateurs | Where-Object $ _. Mode -like '* R *'
Vérifier si un fichier existe
Souvent, lorsque vous travaillez avec des fichiers, il suffit de savoir si un fichier existe ou si un chemin de dossier est valide. PowerShell propose une cmdlet pour effectuer cette validation sous la forme de Chemin d'essai, qui retourne une valeur vraie ou fausse.
Chemin d'essai est souvent utile comme mesure de précaution avant de tenter de copier ou de supprimer un fichier particulier.
Copier, déplacer et supprimer des fichiers
Comme vous vous en doutez, PowerShell est parfaitement capable d’effectuer des opérations de fichier standard sur de nombreux objets en une seule passe. le Copier-Item La cmdlet peut être utilisée pour copier un ou plusieurs fichiers ou dossiers d’un emplacement, identifiés par le -Chemin paramètre, à l'emplacement spécifié par le -Destination option.
De même, le Élément de mouvement La cmdlet est utilisée lors du déplacement d'un fichier ou d'un dossier. Lors de la copie ou du déplacement d’une structure de dossiers, le -Recours switch doit être utilisé pour que la cmdlet exécute l'action sur le dossier et son contenu. Dans certains cas, le -Obliger Un commutateur est nécessaire, par exemple lorsqu'un fichier en lecture seule est écrasé par l'opération de copie.
Les fichiers et les dossiers peuvent être supprimés à l’aide des touches Retirer l'objet cmdlet. Comme dans le thème de nombreuses applets de commande discutées ici, le -Obliger switch doit être utilisé lorsque des fichiers cachés ou en lecture seule sont rencontrés, et -Recours doit être utilisé lors de la suppression d’un dossier et de son contenu.
Utiliser PowerShell -Et qu'est-ce qui se passerait si et -Confirmer
On dit que les scripts permettent aux gens de faire des choses stupides très rapidement. Avant d’appuyer sur la gâchette lors d’une grosse opération de suppression, utilisez le -Et qu'est-ce qui se passerait si commutateur offert pour la majorité des cmdlets présentées ici.
le -Et qu'est-ce qui se passerait si switch vous permet de voir ce qui se passera si vous exécutez réellement le script ou la commande, sans les effets négatifs potentiels de la suppression de données critiques. Il convient également de noter que -Et qu'est-ce qui se passerait si ne se limite pas aux opérations sur les fichiers, il est largement utilisé dans PowerShell.
Pour les scripts que vous avez l'intention d'exécuter manuellement ou pire, demandez à un subordonné de s'exécuter manuellement, envisagez d'utiliser -Confirmer. Cela vous permet d’exiger l’interaction de l’utilisateur avant l’opération. Il est souvent préférable d’agir en supposant que tout est prêt à fonctionner (sauvegardes de fichiers terminées, réplication désactivée, etc.) avant le lancement d’opérations sur des fichiers volumineux.
Objets, tuyauterie, filtrage et plus
La clé de PowerShell, en plus de la dénomination normalisée et d'autres fonctionnalités qui la rendent intuitive, est que de nombreuses applets de commande sont basées sur des objets. En travaillant avec des objets, PowerShell vous permet d’apporter facilement des modifications à plusieurs éléments avec une seule ligne de code, de modifier un sous-ensemble spécifique d’éléments par milliers, ou d’utiliser ces objets pour collecter des données ou effectuer des actions sur d’autres objets connexes. Objets PowerShell
Les objets, pour ceux qui ne connaissent pas la terminologie, font référence à des éléments contenant plusieurs attributs ou propriétés; tels que des chaînes de caractères, des listes d’informations et des valeurs numériques. Un bon exemple d'objet est un processus Windows, récupéré à l'aide de l'outil Get-Process cmdlet, qui contient plusieurs propriétés indiquant le nom de l'exécutable, la priorité, l'utilisation du processeur et l'utilisation de la mémoire.
le Get-membre La cmdlet peut être utilisée pour explorer des objets et leurs propriétés et méthodes de membre. Get-Member vous montrera non seulement les propriétés d'un objet et les types de données qu'il contient, mais également le type d'objet, qui peut à son tour être utilisé pour rechercher d'autres applets de commande pouvant accepter un type d'objet.
Tuyauterie
PowerShell vous permet de tirer parti des applets de commande et des objets grâce à une technique connue sous le nom de tuyauterie. En utilisant le caractère de canal (|), vous pouvez sélectionner rapidement et facilement des objets, puis leur effectuer une action. Un exemple parfait de tuyauterie est de tuer des processus spécifiques en utilisant Get-Process java | Stop-Process. De même, vous pouvez redémarrer les services en utilisant une seule ligne telle que Spouleur Get-Service | Service de redémarrage.
Souvent, les applets de commande avec le même nom seront utilisées lors du raccordement, mais la technique ne se limite pas aux applets de commande avec le même nom. En utilisant le type d'objet renvoyé à l'aide de Get-Member, vous pouvez trouver d'autres applets de commande qui peuvent être utilisées pour recevoir une commande piped. La cmdlet Get-Command avec le type d'objet spécifié à l'aide de -ParameterType renverra une liste d'applets de commande pouvant accepter le type d'objet désigné.
Filtration
Il existe toute une liste d'applets de commande dans PowerShell utilisées pour effectuer des opérations de levage lourdes avec des objets, en particulier celles avec le nom Object. Un grand nombre de ces applets de commande font partie des applets de commande les plus couramment utilisées, tandis que d'autres sont utilisées pour des tâches plus spécialisées.
le Où-objet L'applet de commande vous permet de limiter ou de filtrer l'objet transmis au pipeline. Par exemple, la commande Get-Service | Where-Object $ _. DependentServices -ne $ null renverra une liste de services qui ont des dépendances. La syntaxe utilisée avec Where-Object mérite d'être notée et s'applique également à certaines des autres applets de commande d'objet. Les crochets sont utilisés pour délimiter un bloc de code dans PowerShell et indiquent dans ce cas la condition appliquée à l'objet dans le pipeline. La variable automatique $ _ est utilisée pour indiquer l'instance actuelle de l'objet en cours d'évaluation. Les opérateurs de comparaison PowerShell utilisent une mise en forme avec un tiret, ainsi -eq (égal) est utilisé pour trouver une correspondance exacte avec le mot "Stopped" dans notre exemple.
L'utilisation interactive d'alias dans la console PowerShell permet d'économiser du temps et des efforts. La cmdlet Where-Object utilise le point d'interrogation (?). PowerShell 3.0 vous permet même de simplifier encore plus votre syntaxe Where-Object en supprimant la nécessité du bloc de script et de la variable automatique du pipeline. Dans PowerShell 3.0, cette commande est équivalente à celle fournie ci-dessus: Get-Service | ? DependentServices -ne $ null.
Agir sur des objets
Pour chaque objet est utilisé pour effectuer une action sur chaque instance d'un objet. Du point de vue de la syntaxe, ForEach-Object est très similaire à Where-Object, le bloc de script et les variables automatiques étant utilisés avec les deux applets de commande. Où excelle ForEach-Object, c'est d'être capable d'exécuter des tâches trop complexes pour une simple tuyauterie. Par exemple, vous devrez peut-être répertorier la sécurité des fichiers pour un partage de fichiers. Dans ce cas, vous pouvez utiliser le canal Get-ChildItem cmdlet à Pour chaque objetet ensuite utiliser Get-ACL par rapport au paramètre nom complet ($ _. Nom complet) pour répertorier la sécurité de fichier pour la liste de fichiers.
Comme avec Where-Object, l'applet de commande ForEach-Object peut être simplifiée à l'aide d'un alias, indiqué par le signe de pourcentage (%). De plus, la syntaxe PowerShell 3.0 est prise en charge afin de fournir une utilisation encore plus intuitive.
Bien que filtrer un objet ou effectuer une action sur les occurrences d'un objet soient deux tâches courantes, il est conseillé d'éviter autant que possible Where-Object et ForEach-Object. De nombreuses cmdlets offrent une -Filtre option ou d'autres paramètres permettant de limiter le nombre de résultats sans avoir à examiner chaque instance d'un objet, ce qui entraîne généralement une amélioration significative des performances.
De même, ForEach-Object effectue une action individuelle sur chaque instance de l’objet acheminé. Dans la mesure du possible, les objets doivent être redirigés directement vers des applets de commande qui peuvent effectuer l'action requise sur tout l'objet sans avoir à énumérer chaque élément de l'objet.
Opérateurs de comparaison et logique conditionnelle
Les administrateurs système prennent chaque jour des décisions concernant les tâches de maintenance à exécuter sur les serveurs en fonction de nombreux critères. L'automatisation des tâches administratives répétitives avec PowerShell implique souvent l'utilisation de la logique pour reproduire ce processus de prise de décision. Plusieurs techniques peuvent être utilisées pour obtenir les résultats souhaités à l'aide de comparaisons, de filtres et d'une logique conditionnelle.
Opérateurs de comparaison PowerShell
Vous ne serez pas loin dans la création de scripts PowerShell sans effectuer de logique conditionnelle, qui commence par la comparaison de valeurs. La possibilité de vérifier si un utilisateur existe, si un fichier a été créé ou si un ordinateur est capable de se connecter à un autre nécessite une comparaison avec une valeur. Le seul grand avantage de PowerShell concerne la syntaxe: plutôt que d’utiliser des opérateurs de comparaison traditionnels tels que < ou >PowerShell utilise -lt ou -gt effectuer des comparaisons.
Plusieurs opérateurs de comparaison sont le plus souvent utilisés avec des valeurs numériques, bien qu'ils aient leur place lorsque vous travaillez avec des dates ou des numéros de version, ainsi que d'autres types de variables. Le tableau suivant contient les opérateurs de comparaison les plus couramment utilisés pour comparer les nombres.
Lors de la comparaison avec des chaînes de texte -eq peut être utilisé quand une correspondance exacte est requise. le -rencontre l'opérateur peut être utilisé lors de la recherche d'une partie d'une chaîne, ou -comme peut être utilisé pour effectuer des recherches génériques. PowerShell peut également être utilisé pour rechercher une valeur particulière dans un tableau en utilisant -dans, -pas dedans, -contain, ou – ne contient pas.
Dans les cas où plusieurs conditions doivent être remplies, des instructions entre parenthèses peuvent être utilisées afin de gérer des groupes de conditions. L'exemple suivant peut être utilisé pour sélectionner des processus liés à différents navigateurs Web:
Get-Process | Where-Object ($ _. Name -eq "iexplore") -or ($ _. Name -eq "chrome") -or ($ _. Name -eq "firefox")
PowerShell Où-Objet
De nombreuses applets de commande PowerShell courantes renvoient une longue liste de valeurs peu utiles dans leur ensemble. Utiliser Where-Object vous permet de limiter rapidement les résultats aux conditions que vous définissez dans une ScriptBlock. L'exemple suivant répertorie les fichiers du profil de l'utilisateur actuel pour lesquels le bit d'archivage est défini:
Get-ChildItem $ env: USERPROFILE -Recurse -Force | Where-Object $ _. Mode -like "* a *"
Cet exemple montre l’utilisation de la $ _ default variable, utilisée pour indiquer l’enregistrement en cours transmis par le pipeline. PowerShell 4 vous permet d’utiliser Where-Object en utilisant des alias tels que ? ou Où, et accepte également la notation de raccourci pour la condition. Cet exemple est fonctionnellement identique à celui ci-dessus:
Get-ChildItem $ env: USERPROFILE -Recurse -Force | ? Comme "* a *"
If, elseIf, et else déclarations
L’une des méthodes les plus courantes de contrôle du flux de votre script et d’exécution de la logique conditionnelle consiste à: si déclarations. En définissant d'abord les critères à respecter, puis les mesures à prendre, les professionnels de l'informatique peuvent automatiser des tâches administratives complexes. Dans PowerShell, comme dans la plupart des langages de programmation, si les déclarations peuvent être utilisées avec sinon et autre déclarations, qui vous permettent de gérer plusieurs scénarios.
Une simple déclaration if nécessite la si mot-clé, suivi de la condition entre parenthèses. Lorsque la condition est évaluée comme vrai le code contenu dans le bloc de script suivant est ensuite traité; si faux il est simplement sauté. L'exemple suivant montre une instruction if simple qui teste la connectivité Internet:
if (Test-Connection www.google.com -Quiet) Write-Host "La connexion Internet est active."
Avec le sinon déclaration, vous pouvez ajouter des conditions supplémentaires à une seule instruction if. Cela diffère de plusieurs déclarations if en ce que seule la première condition remplie sera utilisée. Les instructions Else sont placées à la fin d'une instruction if pour exécuter une action si aucune des conditions précédentes n'est remplie. Un exemple de condition plus complexe avec si, sinon, et autre blocs est ci-dessous:
if (Test-Connection www.google.com -Quiet) Write-Host "La connexion Internet est active." elseif (Test-Connection 192.168.0.1 -Quiet) Write-Host "Seule la connectivité du réseau local est disponible." else Write-Host "La connectivité réseau n'est pas disponible."
Changer de relevé
Comme si les déclarations, commutateur vous permet d'exécuter un ensemble de commandes lorsque certains critères sont remplis. La grande différence entre si et commutateur est-ce que les instructions switch évaluent un seul ensemble de critères en fonction de multiples possibilités, plutôt que chaque instruction évalue un ensemble de critères potentiellement non liés.
Les instructions Switch commencent par le mot clé switch suivi de l'expression à évaluer. UNE scriptblock entourée d'accolades suit l'expression évaluée et contient les correspondances potentielles contre lesquelles il faut agir. Chacune de ces correspondances est suivie par un script qui définit les actions à prendre lorsque la condition est remplie. Afin de mener des actions contre des critères sans correspondance, le défaut mot clé peut être utilisé. Cet exemple utilise le Cmdlet Get-Date pour lire le jour de la semaine et le retourner, que ce soit un jour de semaine ou le week-end:
switch ((Get-Date) .DayOfWeek) "Samedi" "Week-end" "Dimanche" "Week-end" Par défaut "Weekday"
L’exemple précédent peut être encore simplifié en utilisant le -Wildcard comme indiqué ci-dessous. L'utilisation de caractères génériques avec des instructions switch vous offre une méthode plus efficace pour effectuer des actions conditionnelles.
switch -Wildcard ((Get-Date) .DayOfWeek) "S *" "Week-end" Par défaut "Weekday"
Utilisation de variables, de tableaux et de tables de hachage
Windows PowerShell vise à rendre les professionnels de l'informatique plus efficaces dans leurs tâches quotidiennes. PowerShell est suffisamment intuitif pour que les administrateurs débutant ou intermédiaire puissent commencer à apprendre le langage, utiliser les applets de commande de la console et même commencer à écrire des scripts relativement simples.
Une fois que vos scripts PowerShell commencent à devenir plus complexes, vous devez commencer à travailler avec des aspects de PowerShell qui vous ramèneront aux cours de programmation que vous avez suivis à l'université. Les variables en particulier sont essentielles pour les scripts, car elles vous permettent de transmettre des informations entre des parties de votre script.
Assignation et référence à des variables PowerShell
Vous connaissez probablement le concept de variables à un certain niveau, qu'il s'agisse d'une expérience antérieure en programmation ou en mathématiques. Des valeurs peuvent être affectées à une variable afin de la référencer dans votre script PowerShell. L'utilisation de variables vous permet de vous assurer que la valeur reste cohérente tout au long du script, facilite sa modification ultérieure (manuellement ou par programme) et rend généralement votre script beaucoup plus lisible.
Les noms de variables dans PowerShell commencent par un $, un péché $ UserName, et les valeurs sont assignées en utilisant =, comme $ UserName = "John Smith" ou $ UserAge = 42. PowerShell prend en charge un grand nombre de types de variables. tels que les chaînes de texte, les entiers, les décimales, les tableaux et même les types avancés tels que les numéros de version ou les adresses IP.
Par défaut, PowerShell tentera de deviner le type de variable à utiliser, mais cela peut être appliqué en indiquant le type avant le nom de la variable, comme dans [int32]$ UserAge = 40. Dans les cas où la valeur affectée ne correspond pas au type appliqué, la valeur sera convertie si possible ou une erreur sera générée.
Il est parfois nécessaire d'assigner ou de modifier dynamiquement la valeur d'une variable plutôt que de simplement attribuer une valeur statique. Cela peut impliquer d'effectuer une opération mathématique sur un nombre ou d'ajouter du texte à une chaîne. Les valeurs numériques peuvent être attribuées ou modifiées à l'aide d'opérateurs mathématiques standard tels que +, -, * et /, comme dans les exemples suivants:
$ secondesPerDay = 24 * 60 * 60 $ weeksPerYear = 365/7
Les valeurs numériques peuvent également être incrémentées ou décrémentées à l'aide de ++ ou – sans avoir à ajouter ou soustraire 1 à la valeur. Ces deux exemples ont le même effet, en augmentant la valeur de la variable de 1:
$ myNumber = $ myNumber + 1 $ myNumber ++
PowerShell utilise l'opérateur d'addition (+) pour concaténer ou lier des chaînes de texte. Les versions ultérieures de PowerShell prennent également en charge l’insertion d’une variable dans une chaîne entre guillemets (par opposition à des guillemets simples), bien que cette technique soit utilisée avec précaution pour optimiser la compatibilité avec les versions antérieures.
$ website = "www.business.com" $ myString = "Mon site Web préféré est" + $ site Web $ myString = "Mon site Web préféré est $ site Web"
Les variables peuvent également être utilisées pour conserver les informations renvoyées par les applets de commande. Ceci est particulièrement utile si votre script demande que le même ensemble d’informations soit utilisé plusieurs fois. Plutôt que d'exécuter la même applet de commande plusieurs fois, vous pouvez l'affecter à une variable et l'utiliser ultérieurement dans le script aussi souvent que vous le souhaitez.
Tableaux et tables de hachage PowerShell
Les tableaux sont le plus souvent utilisés pour contenir une liste de valeurs, telle qu'une liste de noms d'utilisateur ou de villes. PowerShell propose plusieurs formes de tableaux, chacun pouvant être attribué et accessible de différentes manières. Pour les besoins de cet article, nous allons nous concentrer sur les deux plus couramment utilisés. Les tableaux PowerShell de base peuvent être définis en encapsulant une liste d’éléments entre parenthèses et en faisant précéder le @symbole comme dans $ nameArray = @ ("John", "Joe", "Mary"). Les éléments d'un tableau sont accessibles à l'aide de leur index numérique, commençant par 0, entre crochets, comme suit: $ nameArray[0].
Une forme plus avancée de tableau, appelée table de hachage, est attribuée avec des crochets ondulés précédés du symbole @ signe. Bien que les tableaux soient généralement (mais pas toujours) utilisés pour contenir des données similaires, les tables de hachage conviennent mieux aux données associées (plutôt que similaires). Les éléments individuels dans une table de hachage sont nommés plutôt qu’un index numérique, comme dans $ user = @ FirstName = "John"; LastName = "Smith"; MiddleInitial = "J"; Age = 40. Les éléments d’une hashtable sont facilement accessibles à l’aide de la variable et du nom de la clé, comme dans $ user.LastName.
Variables par défaut
Une dernière chose à noter concernant les variables dans PowerShell est qu’il existe une multitude de variables par défaut auxquelles des valeurs sont automatiquement attribuées. Il y a plusieurs variables commençant par le préfixe "$ env:" Cela peut être exploité pour obtenir des éléments tels que le chemin d'accès au répertoire Windows, le dossier temporaire, le nom d'utilisateur ou le domaine actuel et de nombreux autres types d'informations système. Une liste complète des variables $ env peut être obtenue à l’aide de la commande suivante:
Get-ChildItem env:
Plusieurs autres variables supplémentaires sont disponibles telles que $ Accueil et $ PsHome, qui vous fournissent respectivement les chemins d'accès au répertoire de base de l'utilisateur et au répertoire de base PowerShell. La variable $ Host renvoie un objet contenant des informations sur l'environnement PowerShell actuel, qu'il s'agisse de PowerShell ISE ou de la console. Finalement, le $ PSVersionTable contient des informations sur la version de PowerShell installée, notamment: $ PSVersionTable.PSVersion.Major qui indique la version principale de PowerShell disponible sur l'hôte exécutant le script.
Les valeurs PowerShell pour les valeurs booléennes True et False sont automatiquement attribuées à la $ true et $ faux variables par défaut.
Gestion des serveurs et des sessions distants
Comme avec de nombreux outils d'administration système, PowerShell n'apporte qu'un avantage considérable à votre organisation, sans être exploité contre plusieurs systèmes. Dans la plupart des scénarios, cela implique l'exécution de cmdlets ou de scripts PowerShell de telle sorte que les actions soient effectuées sur des systèmes distants.
Examinons certaines des différentes options proposées par PowerShell en matière de gestion à distance. Nous passerons également en revue certaines des exigences requises pour utiliser cette fonctionnalité et des astuces pour tirer le meilleur parti de la gestion à distance de PowerShell.
Gestion de serveurs distants avec PowerShell
La méthode la plus élémentaire d'utilisation de PowerShell pour effectuer des tâches de gestion sur des serveurs distants, ou les ordinateurs Windows en général, consiste à -Nom de l'ordinateur paramètre. Nous avons expliqué comment trouver des cmdlets acceptant le paramètre -ComputerName dans notre publication sur l'utilisation des fonctionnalités d'aide de PowerShell.
La plupart des cmdlets PowerShell standard que vous utilisez quotidiennement (Get-Process, Get-Service, Get-EventLog, etc.) vous permettent d'effectuer des actions sur des ordinateurs distants de cette manière. Il est également intéressant de noter que -ComputerName acceptera plusieurs noms d’hôte, ce qui vous permettra de cibler simultanément une liste d’ordinateurs sans avoir à exécuter la cmdlet plusieurs fois. La gestion des ordinateurs distants à l'aide de cette méthode contourne certaines des exigences relatives aux sessions distantes persistantes de PowerShell.
Activer les sessions à distance PowerShell
Le grand ensemble de fonctionnalités introduit dans PowerShell version 2.0 était la fonctionnalité d'accès distant. Utilisation de WinRM (Windows Remote Management) PowerShell Remoting vous permet de créer une session à distance sur un ordinateur. La fonctionnalité est similaire aux outils d'administration à distance habituels tels que telnet ou SSH, mais utilise des ports et des protocoles standard tels que HTTP et SOAP.
Si PowerShell 2.0 doit être au minimum installé sur la plupart des systèmes Windows de votre réseau (il s'agit de Windows 7 et de Windows Server 2008 par défaut), la communication à distance de PowerShell n'est activée que par défaut jusqu'à Windows Server 2012. Pour activer PowerShell, le service WinRM doit être lancé défini pour démarrer automatiquement et une règle de pare-feu doit être activée pour permettre la communication avec le serveur.
Heureusement, l’accès distant à PowerShell peut être activé en une seule étape à l’aide de la Activer-PSRemoting cmdlet avec le -Obliger basculer d'une invite PowerShell élevée. Dans la mesure où Windows Server 2012 et les versions ultérieures ont activé par défaut la communication à distance PowerShell, il est inutile d'exécuter Enable-PSRemoting sauf si cette fonction a été désactivée pour une raison quelconque.
Pourquoi utiliser des sessions à distance?
Il existe plusieurs raisons importantes pour lesquelles les sessions distantes devraient être utilisées dans certains scénarios plutôt que des applets de commande individuelles sur des ordinateurs distants, la première étant les performances. Lorsque vous exécutez une applet de commande comme Get-Service sur dix ordinateurs différents, l'ordinateur local doit exécuter la commande et traiter les informations de chaque ordinateur. Lorsque des sessions distantes sont exploitées, chaque ordinateur distant exécute la commande, en répartissant la charge de travail sur les dix ordinateurs. Une fois que vous commencez à parler de scripts PowerShell exécutés sur des centaines, voire des milliers d’ordinateurs, les performances deviennent l’une de vos principales priorités.
Une autre raison d'utiliser des sessions PowerShell distantes est la possibilité d'utiliser plusieurs applets de commande au sein d'une même session, ce qui vous permet d'effectuer plusieurs actions sur chaque serveur, voire d'exécuter des scripts entiers à distance. Le potentiel d’utilisation des sessions à distance de cette manière va de l’automatisation des performances des inventaires logiciels au redémarrage périodique des services sur l’ensemble du datacenter ou de tout processus imaginable.
Création de sessions à distance
Bien que les avantages liés à l'utilisation de sessions PowerShell distantes soient clairs, leur travail peut s'avérer un peu plus complexe que de simplement utiliser une cmdlet avec le paramètre -ComputerName. Le moyen le plus simple de lancer une session à distance consiste à utiliser le Invoke-Command cmdlet. Invoke-Command, ainsi que les paramètres -ComputerName et -ScriptBlock, vous permettent de définir les serveurs distants à gérer et les commandes administratives à exécuter à distance.
Pour des scénarios plus détaillés de gestion à distance de PowerShell, vous pouvez gérer les sessions comme leur propre entité en créant tout d'abord une session à l'aide de la New-PSSession cmdlet. L'avantage de New-PSSession est que la session persiste au cours de plusieurs instances Invoke-Command, ce qui vous permet de transmettre des variables et des objets à d'autres applets de commande de votre script. Les sessions persistantes peuvent être créées à l'aide de la cmdlet New-PSSession et en l'affectant à une variable, qui peut ensuite être référencée à l'aide de Invoke-Command et éventuellement fermée à l'aide de Remove-PSSession. Cet exemple illustre l'utilisation d'une session persistante, sans laquelle la deuxième instance de Invoke-Command échouerait:
$s = New-PSSession -ComputerName "SRV1" Invoke-Command -Session $s -ScriptBlock $services = Get-Service Invoke-Command -Session $s -ScriptBlock Where-Object $_.Status -eq "Stopped" Remove-PSSession $s
Sessions and credentials
In the examples given above, the current user's credentials are used to create the remote session and execute commands against the remote server. Both the Invoke-Command and New-PSSession cmdlets accept PowerShell credential objects, which are created using the New-PSCredential cmdlet. The benefit of using this method is that an administrator can require credentials be provided in support of specific actions targeting remote servers.
PowerShell provides numerous methods for efficiently managing a single local server or thousands of servers across the globe. Becoming familiar with the PowerShell toolset could be critical in remaining a valuable resource in your workplace.







Commentaires
Laisser un commentaire