18Aug

Geek School: Apprendre à utiliser des objets dans PowerShell

Comprendre les objets est l'un des concepts fondamentaux pour "obtenir" PowerShell. Rejoignez-nous alors que nous explorons des objets et comment ils font PowerShell mieux que tout autre shell là-bas aujourd'hui.

Soyez sûr de lire les articles précédents de la série:

  • Apprenez à automatiser Windows avec PowerShell
  • Apprendre à utiliser des applets de commande 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 comme Bash, ou même l'invite de commande héritée? La réponse est vraiment simple: les shells traditionnels produisent 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 voulez faire toute sorte d'analyse de texte lourd, vous devez connaître des expressions régulières comme ledos de votre main.

PowerShell tire parti du framework. Net sous-jacent et adopte une approche différente, utilisant des objets au lieu de texte. Les objets sont juste une représentation de quelque chose. Ils sont une collection de pièces et d'actions pour les utiliser. Jetons un coup d'oeil sur les 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 voulons représenter un service Windows en tant qu'objet, nous pouvons décider qu'il est approprié de le décrire en utilisant trois propriétés: Nom du service, Etat et Description. Nous devons également interagir avec le service, afin que nous puissions 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 passant à l'applet de commande Get-Member. Les objets sortis d'une applet de commande PowerShell sont en grande partie des types sous-jacents du framework. 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 y a beaucoup de shells Linux avec un pipeline, vous permettant d'envoyer le texte que l'une des commandes sort en entrée de la commande suivante dans le pipeline. PowerShell prend cela au niveau suivant en vous permettant de prendre les objets que l'une cmdlet sorties et les transmettre en entrée à la cmdlet suivante dans le pipeline. L'astuce consiste à connaître le type d'objet renvoyé par une applet de commande, ce qui est très facile lorsque vous utilisez la cmdlet Get-Member.

Get-Service |Get-Member

Pour des raisons indépendantes de la portée de cet article, les propriétés et méthodes sont appelées conjointement membres de la classe, ce qui explique pourquoi vous utilisez la cmdlet Get-Member pour obtenir une liste de toutes les méthodes et propriétés d'un objet. Toutefois, la cmdlet 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

Comme PowerShell traite des objets et non du texte, toutes les cmdlets ne peuvent pas être liées ensemble en utilisant le pipeline [1].Cela signifie que nous devons trouver une cmdlet qui accepte un objet System. ServiceProcess. ServiceController du pipeline.

Get-Command -ParameterType System. ServiceProcess. ServiceController

Notez qu'il existe une cmdlet appelée Stop-Service;Jetons un coup d'oeil à l'aide pour cela.

Get-Help -Name Stop-Service

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

Get-Help -Name Stop-Service -Full

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

  • Get-Service retourne les 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 cette information, nous pourrions faire ce qui suit:

Get-Service -Name 'Apple Mobile Device' |Stop-Service

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.

Homework

  • Lire sur le pipeline d'objets

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