Page d'accueil » comment » École Geek Apprendre à utiliser des objets dans PowerShell

    École Geek Apprendre à utiliser des objets dans PowerShell

    Comprendre les objets est l’un des concepts fondamentaux pour «obtenir» PowerShell. Rejoignez-nous lors de l'exploration d'objets et de la façon dont ils rendent PowerShell meilleur que tout autre shell existant aujourd'hui..

    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 de texte lourde, vous devez connaître les expressions régulières telles que le derrière 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'oeil aux pièces d'un vélo et comment 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.

    Vous pouvez voir les propriétés et les méthodes d'un objet en le transmettant à la cmdlet Get-Member. Les objets qu'une sortie d'applet de commande PowerShell produit 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 existe de nombreux shells Linux dotés d’un pipeline, ce qui vous permet d’envoyer le texte généré par une commande en entrée de la commande suivante du pipeline. PowerShell passe au niveau supérieur 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-membre

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

    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

    Notez qu'il existe une applet de commande 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 un tableau d'objets ServiceController en entrée. Généralement, si vous voyez un paramètre appelé InputObject, il acceptera les entrées 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 corrects. Donc, à ce stade, nous savons ce qui suit:

    • 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' | Aire d'autoroute

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

    Devoirs

    • Lire sur le pipeline d'objets

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