Passer des données avec ByValue
Lorsque les données sont passées à l’aide de ByValue, un paramètre peut accepter des objets complets à partir du pipeline lorsque ces objets sont du type accepté par le paramètre. Une seule commande peut avoir plusieurs paramètres acceptant l’entrée de pipeline ByValue, mais chaque paramètre doit accepter un type d’objet différent.
Par exemple, Get-Service peut accepter l’entrée de pipeline ByValue sur ses paramètres –InputObject et –Name . Chacun de ces paramètres accepte un genre d’objet différent. –InputObject accepte les objets du type ServiceController, et –Name accepte les objets du type String. Prenons l’exemple suivant :
'BITS','WinRM' | Get-Service
Ici, deux objets de chaîne sont redirigés vers Get-Service. Ils s’attachent au paramètre –Name , car ce paramètre accepte ce type d’objet, ByValue, à partir du pipeline.
Pour prédire la fonction que Windows PowerShell effectue avec l’objet dans le pipeline, vous devez déterminer le genre d’objet dans le pipeline. À cet effet, vous pouvez diriger l’objet vers Get-Member. La première ligne de sortie vous indique le genre d’objet contenu par le pipeline. Par exemple :
PS C:\> "BITS","WinRM" | Get-Member
TypeName: System.String
Name MemberType Definition
---- ---------- ----------
Ici, le pipeline contient des objets de type System.String. Windows PowerShell abrège souvent les noms de types pour inclure uniquement la dernière partie. Dans cet exemple, cette dernière partie est String.
Ensuite, vous examinez l’aide complète relative à la commande suivante dans le pipeline. Dans cet exemple, il s’agit de Get-Service, et vous trouverez que les paramètres –InputObject et –Name acceptent les entrées du pipeline ByValue. Étant donné que le pipeline contient des objets du type String et que le paramètre –Name accepte les objets du type String à partir du pipeline ByValue, les objets du pipeline se lient au paramètre –Name.
Types d’objets génériques
Windows PowerShell reconnaît deux genres d’objets génériques : Object et PSObject. Les paramètres qui acceptent ces genres d’objets peuvent accepter n’importe quel genre d’objet. Lorsque vous effectuez une liaison de paramètre de pipeline ByValue , Windows PowerShell recherche d’abord le type d’objet le plus spécifique possible. Si le pipeline contient une chaîne et qu’un paramètre peut accepter string, ce paramètre reçoit les objets.
S’il n’existe aucune correspondance pour un type de données spécifique, Windows PowerShell essaie d’établir une correspondance avec des types de données génériques. Ce comportement est la raison pour laquelle les commandes telles que Sort-Object et Select-Object fonctionnent. Chacune de ces commandes a un paramètre nommé –InputObject qui accepte les objets du type PSObject à partir du pipeline ByValue. C’est pourquoi vous pouvez diriger n’importe quel type d’objet vers ces commandes. Leur paramètre –InputObject reçoit n’importe quel objet du pipeline, car il accepte des objets de n’importe quel type.