About Pipelines.help

download About Pipelines.help

If you can't read please download the document

Transcript of About Pipelines.help

RUBRIQUE about_pipelinesDESCRIPTION COURTE Combinaison de commandes en pipelines dans Windows PowerShell DESCRIPTION LONGUE Un pipeline est une srie de commandes connectes par des oprateurs de pipeline (|) (ASCII 124). Chaque oprateur de pipeline envoie les rsultats de la commande prcdente la commande suivante. Vous pouvez utiliser des pipelines pour envoyer les objets gnrs par une commande une autre commande qui les utilisera comme entre traiter. De mme, vous pouvez envoyer la sortie de cette commande une autre commande encore. Il en rsulte une chane de commandes trs puissante ou " pipeline " comprenant une srie de commandes simples. Par exemple : Command-1 | Command-2 | Command-3 Dans cet exemple, les objets mis par Command-1 sont envoys Command-2. Command-2 les traite et les envoie Command-3. Command-3 les traite et les envoie vers la suite du pipeline. tant donn qu'il n'y a plus de commande dans le pipeline, les rsultats s'affichent sur la console. Dans un pipeline, les commandes sont traites de gauche droite, dans l'ordre dans lequel elles apparaissent. Le traitement est men comme une opration unique et la sortie est affiche ds qu'elle est gnre. Voici un exemple simple. La commande suivante obtient le processus Notepad (Bloc-notes), puis l'arrte. get-process notepad | stop-process La premire commande utilise l'applet de commande Get-Process pour obtenir un objet reprsentant le processus Notepad. Elle utilise un oprateur de pipeline (|) pour envoyer l'objet processus l'applet de commande Stop-Process, qui arrte le processus Notepad. Remarquez que la commande Stop-Process ne comporte aucun paramtre Name ou ID pour spcifier le processus car le processus spcifi est envoy travers le pipeline. Voici un exemple pratique. Ce pipeline de commandes obtient les fichiers texte du rpertoire actif, slectionne uniquement les fichiers de plus de 10 000 octets de long, les trie par longueur, puis affiche le nom et la longueur de chaque fichier dans une table. Get-ChildItem -path *.txt | Where-Object {$_.length -gt 10000} | Sort-Object -property Length | Format-Table -property name, length Ce pipeline comporte quatre commandes dans l'ordre spcifi. La commande est crite horizontalement, mais nous afficherons le processus verticalement dans le graphique suivant. Get-ChildItem -path *.txt | | (FileInfo objects ) | ( .txt ) | V Where-Object {$_.length -gt 10000} | | (FileInfo objects ) | ( .txt ) | ( Length > 10000 ) | V Sort-Object -property Length | | (FileInfo objects ) | ( .txt ) | ( Length > 10000 ) | ( Sorted by length ) | V Format-Table -property name, length | | (FileInfo objects ) | ( .txt ) | ( Length > 10000 ) | ( Sorted by length ) | (Formatted in a table ) | V Name Length ---- ------ tmp1.txt 82920 tmp2.txt 114000 tmp3.txt 114000UTILISATION DE PIPELINES Les applets de commande Windows PowerShell ont t conues pour tre utilises dans des pipelines. Par exemple, vous pouvez gnralement rediriger les rsultats d'une applet de commande Get vers une applet de commande d'action (telle que Set, Start, Stop ou Rename) pour le mme nom. Par exemple, vous pouvez rediriger tout service de l'applet de commande Get-Service vers l'applet de commande Start-Service ou Stop-Service (toutefois, les services dsactivs ne peuvent pas tre redmarrs de cette faon). Ce pipeline de commandes dmarre le service WMI sur l'ordinateur local :get-service wmi | start-service Les applets de commande qui obtiennent et dfinissent des objets des fournisseurs Windows PowerShell, telles que les applets de commande Item et ItemProperty, sont galement conues pour tre utilises dans des pipelines. Par exemple, vous pouvez rediriger les rsultats d'une commande Get-Item ou Get-ChildItem du fournisseur de Registre Windows PowerShell vers l'applet de commande New-ItemProperty. Cette commande ajoute une nouvelle entre de Registre, NoOfEmployees, avec la valeur 8124 la cl de Registre MyCompany. get-item -path HKLM:\Software\MyCompany | new-Itemproperty -name NoOfEmployees -value 8124 Bon nombre des applets de commande utilitaires, telles que Get-Member, Where-Object, Sort-Object, Group-Object et Measure-Object sont utilises presque exclusivement dans des pipelines. Vous pouvez rediriger tout type d'objet vers ces applets de commande. Par exemple, vous pouvez rediriger tous les processus de l'ordinateur vers la commande Sort-Object pour qu'ils soient tris selon le nombre de handles qu'ils contiennent.get-process | sort-object -property handles De mme, vous pouvez rediriger tout type d'objet vers les applets de commande de mise en forme, telles que Format-List et Format-Table, les applets de commande Export, telles que Export-Clixml et Export-CSV, et les applets de commande Out, telles qu'Out-Printer. Par exemple, vous pouvez rediriger le processus Winlogon vers l'applet de commande Format-List pour afficher toutes les proprits du processus dans une liste.get-process winlogon | format-list -property * Avec un peu de pratique, vous vous apercevrez que le fait de combiner des commandes simples dans des pipelines est un rel gain de temps et rend l'criture de scripts plus efficace.FONCTIONNEMENT DES PIPELINES Lorsque vous redirigez des objets, c'est--dire lorsque vous les envoyez de la sortie d'une commande vers une autre commande, Windows PowerShell essaie de les associer l'un des paramtres de l'applet de commande destinataire. Pour cela, le composant de liaison des paramtres de Windows PowerShell, qui associe des objets d'entre aux paramtres d'applet de commande, essaie de trouver un paramtre remplissant les critres suivants : -- Le paramtre doit accepter l'entre provenant d'un pipeline (tous ne l'acceptent pas). -- Le paramtre doit accepter le type d'objet envoy ou un type d'objet vers lequel l'objet peut tre converti. -- Le paramtre ne doit pas dj tre utilis dans la commande. Par exemple, l'applet de commande Start-Service comporte de nombreux paramtres, mais seuls deux d'entre eux, Name et InputObject, acceptent l'entre du pipeline. Le paramtre Name accepte des chanes et le paramtre InputObject accepte des objets services. Par consquent, vous pouvez rediriger des chanes et des objets services (ainsi que des objets avec des proprits pouvant tre converties en chane et objets services) vers Start-Service. Si le composant de liaison des paramtres de Windows PowerShell ne peut pas associer les objets redirigs un paramtre de l'applet de commande destinataire, la commande choue et Windows PowerShell vous invite fournir les valeurs de paramtre manquantes. Vous ne pouvez pas forcer le composant de liaison des paramtres associer des objets redirigs un paramtre particulier. Vous ne pouvez mme pas suggrer un paramtre. C'est en effet la logique du composant qui gre la redirection aussi efficacement que possible.TRAITEMENT INDIVIDUEL La redirection d'objets vers une commande est similaire l'utilisation d'un paramtre de la commande pour l'envoi des objets. Par exemple, la redirection d'objets reprsentant les services de l'ordinateur vers une commande Format-Table, comme suit : get-service | format-table -property name, dependentservices est similaire la procdure consistant enregistrer des objets services dans une variable et utiliser le paramtre InputObject de Format-Table pour les envoyer $services = get-service format-table -inputobject $services -property name, dependentservices ou l'incorporation de la commande dans la valeur de paramtre. format-table -inputobject (get-service wmi) -property name, dependentservices Toutefois, il y a une diffrence importante. Lorsque vous redirigez plusieurs objets vers une commande, Windows PowerShell les envoie un par un. Lorsque vous utilisez un paramtre de commande, les objets sont envoys comme un objet tableau unique. Cette diffrence apparemment technique peut avoir d'intressantes, et parfois utiles, consquences. Par exemple, si vous redirigez plusieurs objets processus de l'applet de commande Get-Process vers l'applet de commande Get-Member, Windows PowerShell envoie chaque objet processus, un par un, Get-Member. Get-Member affiche la classe (type) .NET des objets processus et leurs proprits et mthodes. (Get-Member supprime les doublons, donc si les objets sont tous du mme type, il affiche un seul type d'objet.) Dans ce cas, Get-Member affiche les proprits et mthodes de chaque objet processus, autrement dit, un objet System.Diagnostics.Process. get-process | get-member TypeName: System.Diagnostics.Process Name MemberType Definition ---- ---------- ---------- Handles AliasProperty Handles = Handlecount Name AliasProperty Name = ProcessName NPM AliasProperty NPM = NonpagedSystemMemorySize ... Toutefois, si vous utilisez le paramtre InputObject de Get-Member, Get-Member reoit un tableau d'objets System.Diagnostics.Process comme seule unit et affiche les proprits d'un tableau d'objets. (Remarquez le symbole de tableau ([]) aprs le nom de type System.Object.) get-member -inputobject (get-process) TypeName: System.Object[] Name MemberType Definition ---- ---------- ---------- Count AliasProperty Count = Length Address Method System.Object & Address(Int32 ) Clone Method System.Object Clone() ... Ce rsultat peut ne pas tre ce que vous attendiez, mais lorsque vous l'aurez compris, vous pourrez l'utiliser. Par exemple, un tableau d'objets processus comporte une proprit Count que vous pouvez utiliser pour compter le nombre de processus sur l'ordinateur.(get-process).count Cette distinction peut avoir son importance. Aussi, rappelez-vous que lorsque vous redirigez des objets vers une applet de commande, ils sont remis un par un. ACCEPTE L'ENTRE DE PIPELINE Pour recevoir des objets provenant d'un pipeline, l'applet de commande destinataire doit avoir un paramtre qui accepte l'entre de pipeline. Vous pouvez utiliser une commande Get-Help avec les paramtres Full ou Parameter pour dterminer lequel, le cas chant, des paramtres d'une applet de commande accepte l'entre de pipeline. Dans l'affichage par dfaut de Get-Help, l'lment "Accepts pipeline input" (" Accepte l'entre de pipeline ") apparat dans une table d'attributs de paramtre. Cette table s'affiche uniquement lorsque vous utilisez les paramtres Full ou Parameter de l'applet de commande Get-Help. Par exemple, pour dterminer lequel des paramtres de l'applet de commande Start-Service accepte l'entre de pipeline, tapez : get-help start-service -full get-help start-service -parameter * Par exemple, l'aide sur l'applet de commande Start-Service indique que les paramtres Name et InputObject acceptent l'entre de pipeline ("true", " vrai "). Tous les autres paramtres ont une valeur "false" (" faux ") pour la ligne "Accept pipeline input?" (" Accepter l'entre de pipeline ? "). -name Spcifie le nom de service du service dmarrer. Le nom de paramtre est facultatif. Vous pouvez utiliser " -Name " ou son alias, " -ServiceName ", ou encore omettre le nom de paramtre. Obligatoire ? true Position ? 1 Valeur par dfaut --> Accepter l'entre de pipeline ? true (ByValue, ByPropertyName) Accepter les caractres gnriques ? true -inputObject Spcifie les objets ServiceController reprsentant les services dmarrer. Entrez une variable contenant les objets ou tapez une commande ou une expression qui obtient les objets. Obligatoire ? false Position ? named Valeur par dfaut --> Accepter l'entre de pipeline ? true (ByValue) Accepter les caractres gnriques ? false Cela signifie que vous pouvez envoyer des objets (PsObject) travers le pipeline l'applet de commande Where-Object et que Windows PowerShell associera l'objet au paramtre InputObject.MTHODES D'ACCEPTATION DE L'ENTRE DE PIPELINE Les paramtres d'applet de commande peuvent accepter l'entre de pipeline de l'une des deux faons suivantes : -- Par valeur (ByValue) : les paramtres qui acceptent l'entre " par valeur " peuvent accepter des objets redirigs qui ont le mme type .NET que leur valeur de paramtre ou des objets pouvant tre convertis en ce type. Par exemple, le paramtre Name de Start-Service accepte l'entre de pipeline par valeur. Il peut accepter des objets chanes ou des objets pouvant tre convertis en chanes. -- Par nom de proprit (ByPropertyName) : les paramtres qui acceptent l'entre " par nom de proprit " peuvent accepter des objets redirigs uniquement lorsqu'une proprit de l'objet porte le mme nom que le paramtre. Par exemple, le paramtre Name de Start-Service peut accepter des objets ayant une proprit Name. (Pour rpertorier les proprits d'un objet, redirigez-le vers Get-Member.) Certains paramtres peuvent accepter des objets par valeur ou par nom de proprit. Ces paramtres sont conus pour accepter facilement l'entre de pipeline.EXAMEN DES ERREURS DE PIPELINE Si une commande choue cause d'une erreur de pipeline, vous pouvez examiner cette dernire et la rcrire. Par exemple, la commande suivante essaie de dplacer une entre du Registre d'une cl de Registre vers une autre en utilisant l'applet de commande Get-Item pour obtenir le chemin de destination, puis rediriger le chemin d'accs vers l'applet de commande Move-ItemProperty. La commande utilise, en particulier, l'applet de commande Get-Item pour obtenir le chemin de destination. Elle utilise un oprateur de pipeline pour envoyer le rsultat l'applet de commande Move-ItemProperty. La commande Move-ItemProperty spcifie le chemin d'accs actif et le nom de l'entre du Registre dplacer. get-item -path hklm:\software\mycompany\sales | move-itemproperty -path hklm:\software\mycompany\design -name product La commande choue et Windows PowerShell affiche le message d'erreur suivant : Move-ItemProperty : l'objet d'entre ne peut tre li aucun paramtre de la commande, soit parce que cette commande n'accepte pas l'entre de pipeline, soit parce que l'entre et ses proprits ne correspondent aucun des paramtres qui acceptent l'entre de pipeline. la ligne : 1 Caractre : 23 + $a | move-itemproperty