Assurez-vous de lire les articles précédents de la série:
- Apprenez à automatiser Windows avec PowerShell
- Apprendre à utiliser les cmdlets dans PowerShell
Et restez à l’écoute pour le reste de la série toute la semaine.
Objets
Vous êtes-vous déjà demandé ce qui distingue PowerShell d'un shell Linux traditionnel tel que Bash ou même de l'invite de commande héritée? La réponse est très simple: les shells traditionnels génèrent du texte, ce qui rend difficile le formatage et le filtrage. Bien sûr, il existe des outils pour vous aider à faire le travail (sed et grep viennent à l’esprit), mais à la fin de la journée, si vous souhaitez effectuer une analyse syntaxique lourde du texte, vous devez connaître les expressions régulières comme dos de ta main.
PowerShell tire parti du cadre.Net sous-jacent et adopte une approche différente en utilisant des objets plutôt que du texte. Les objets ne sont qu'une représentation de quelque chose. Ils sont une collection de pièces et d’actions pour les utiliser. Jetons un coup d’œil aux pièces d’un vélo et à la façon dont nous pourrions les utiliser.
Les objets en.Net sont sensiblement les mêmes, à deux différences près: les «parties» sont appelées Propriétés et les "instructions" sont appelées les méthodes. Si nous voulions représenter un service Windows sous forme d'objet, nous pourrions décider qu'il est approprié de le décrire à l'aide de trois propriétés: nom du service, état et description. Nous devons également interagir avec le service afin de pouvoir attribuer à l'objet une méthode de démarrage, une méthode d'arrêt et une méthode de pause.
Le pipeline
Un pipeline contient de nombreux shells Linux, ce qui vous permet d’envoyer le texte généré par une commande en tant qu’entrée à la commande suivante du pipeline. PowerShell passe au niveau suivant en vous permettant de prendre les objets générés par une applet de commande et de les transmettre en tant qu'entrée à l'applet de commande suivante du pipeline. L'astuce consiste à connaître le type d'objet renvoyé par une applet de commande, ce qui est très simple lorsque vous utilisez l'applet de commande Get-Member.
Get-Service | Get-Member
System.ServiceProcess.ServiceController
Etant donné que PowerShell traite des objets et non du texte, toutes les applets de commande ne peuvent pas être liées ensemble à l'aide du pipeline [1]. Cela signifie que nous devons trouver une cmdlet cherchant à accepter un objet System.ServiceProcess.ServiceController du pipeline.
Get-Command -ParameterType System.ServiceProcess.ServiceController
Get-Help –Name Stop-Service
Get-Help -Name Stop-Service –Full
- Get-Service retourne des objets ServiceController
- Stop-Service a un paramètre appelé InputObject qui accepte un ou plusieurs ServiceControllers en entrée.
- Le paramètre InputObject accepte les entrées de pipeline.
En utilisant cette information, nous pourrions faire ce qui suit:
Get-Service -Name ‘Apple Mobile Device’ | Stop-Service
Devoirs
Lire sur le pipeline d'objets
Si vous avez des questions, vous pouvez me tweeter @taybgibb ou laisser un commentaire.