in

Apprendre à utiliser des objets dans PowerShell

Comprendre les objets est l’un des concepts fondamentaux pour «obtenir» PowerShell. Rejoignez-nous alors que nous explorons les objets et comment ils rendent PowerShell meilleur que tout autre shell aujourd’hui.

Assurez-vous de lire les articles précédents de la série:

Et restez à l’écoute pour le reste de la série toute la semaine.

Objets

Vous êtes-vous déjà demandé ce qui différencie PowerShell d’un shell Linux traditionnel comme Bash, ou même de l’invite de commande héritée? La réponse est très simple: les shells traditionnels produisent du texte, ce qui rend difficile la mise en forme et le filtrage. Bien sûr, il existe des outils pour vous aider à faire le travail (sed et grep viennent à l’esprit), mais en fin de compte, si vous voulez faire une analyse de texte lourde, vous devez connaître des expressions régulières comme le dos de votre main.

PowerShell tire parti de l’infrastructure .Net sous-jacente et adopte une approche différente, en utilisant des objets au lieu du texte. Les objets ne sont qu’une représentation de quelque chose. Ils sont un ensemble de pièces et d’actions pour les utiliser. Jetons un coup d’œil aux parties d’un vélo et comment nous pourrions les utiliser.

Les objets dans .Net sont sensiblement les mêmes, à l’exception de deux petites différences: les «Parts» sont appelées Propriétés et les «Instructions» sont appelées méthodes. Si nous voulions représenter un service Windows en tant qu’objet, nous pourrions décider qu’il est approprié de le décrire à l’aide de trois propriétés: le nom du service, l’état et la description. Nous devons également interagir avec le service, nous pouvons donc donner à l’objet une méthode Start, Stop et Pause.

Vous pouvez voir les propriétés et les méthodes d’un objet en le transmettant à l’applet de commande Get-Member. Les objets générés par une applet de commande PowerShell sont en grande partie des types sous-jacents de l’infrastructure .Net, mais vous pouvez créer vos propres objets si vous devez utiliser un langage tel que C # ou utiliser le type PSObject.

Le pipeline

Il existe de nombreux shells Linux avec un pipeline, vous permettant d’envoyer le texte qu’une commande génère en entrée à la commande suivante dans le pipeline. PowerShell prend cela au niveau suivant en vous permettant de prendre les objets qu’une applet de commande génère et de les transmettre en tant qu’entrée à l’applet de commande suivante dans le pipeline. L’astuce consiste à connaître le type d’objet renvoyé par une applet de commande, ce qui est vraiment facile lorsque vous utilisez l’applet de commande Get-Member.

Get-Service | Get-Member

Pour des raisons qui dépassent le cadre de cet article, les propriétés et les méthodes sont appelées conjointement membres de classe, ce qui explique pourquoi vous utilisez l’applet de commande Get-Member pour obtenir une liste de toutes les méthodes et propriétés d’un objet. Cependant, l’applet de commande Get-Member renvoie également une autre information importante, le type d’objet sous-jacent. Dans la capture d’écran ci-dessus, nous pouvons voir que Get-Service renvoie des objets du type:

System.ServiceProcess.ServiceController

Étant 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 applet de commande qui cherche à accepter un objet System.ServiceProcess.ServiceController du pipeline.

Get-Command -ParameterType System.ServiceProcess.ServiceController

Notez qu’il existe une applet de commande appelée Stop-Service; jetons un coup d’œil à l’aide pour cela.

Get-Help –Nom Stop-Service

Il semble que le paramètre InputObject accepte un tableau d’objets ServiceController en entrée. Habituellement, si vous voyez un paramètre appelé InputObject, il acceptera l’entrée du Pipeline, mais pour être sûr, jetons un coup d’œil à l’aide complète pour ce paramètre.

Get-Help -Name Stop-Service –Full

Nos soupçons étaient justes. Donc, à ce stade, nous savons ce qui suit:

  • Get-Service renvoie 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 l’entrée de pipeline.

En utilisant ces informations, nous pourrions effectuer les opérations suivantes:

Get-Service -Nom «appareil mobile Apple» | Aire d’autoroute

C’est tout pour cette fois les gens. La prochaine fois, nous verrons comment nous pouvons formater, filtrer et comparer des objets dans le pipeline.

Devoirs

Si vous avez des questions, vous pouvez me tweeter @taybgibb, ou laissez simplement un commentaire.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Guide du débutant à Flock, le navigateur de médias sociaux

Guide du débutant à Flock, le navigateur de médias sociaux

Comment faire en sorte que Siri réponde à votre voix (sans appuyer sur quoi que ce soit)