Note
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier les répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de changer de répertoire.
Une source d’entrée pour une applet de commande est un objet sur le pipeline qui provient d’une applet de commande en amont. Cette section explique comment ajouter un paramètre à l’applet de commande Get-Proc (décrite dans Création de votre première applet de commande) afin que l’applet de commande puisse traiter les objets de pipeline.
Cette applet de commande Get-Proc utilise un paramètre Name qui accepte l’entrée d’un objet de pipeline, récupère les informations de processus de l’ordinateur local en fonction des noms fournis, puis affiche des informations sur les processus sur la ligne de commande.
Définition de la classe Cmdlet
La première étape de la création de l’applet de commande consiste toujours à nommer l’applet de commande et à déclarer la classe .NET qui implémente l’applet de commande. Cette applet de commande récupère les informations de processus. Le nom du verbe choisi ici est « Get ». (Presque n’importe quelle sorte d’applet de commande capable de récupérer des informations peut traiter l’entrée de ligne de commande.) Pour plus d’informations sur les verbes d’applet de commande approuvés, consultez noms de verbes d’applet de commande.
Voici la définition de cette applet de commande Get-Proc. Les détails de cette définition sont indiqués dans Création de votre première applet de commande.
[Cmdlet(VerbsCommon.Get, "proc")]
public class GetProcCommand : Cmdlet
<Cmdlet(VerbsCommon.Get, "Proc")> _
Public Class GetProcCommand
Inherits Cmdlet
Définition d’une entrée à partir du pipeline
Cette section explique comment définir l’entrée à partir du pipeline pour une applet de commande. Cette applet de commande Get-Proc définit une propriété qui représente le paramètre Name, comme décrit dans Ajout de paramètres qui traitent lesd’entrée de ligne de commande.
(Consultez cette rubrique pour obtenir des informations générales sur la déclaration de paramètres.)
Toutefois, lorsqu’une applet de commande doit traiter l’entrée du pipeline, ses paramètres doivent être liés aux valeurs d’entrée par le runtime Windows PowerShell. Pour ce faire, vous devez ajouter le mot clé ValueFromPipeline ou ajouter le mot clé ValueFromPipelineByProperty à la déclaration d’attribut System.Management.Automation.ParameterAttribute. Spécifiez le mot clé ValueFromPipeline si l’applet de commande accède à l’objet d’entrée complet. Spécifiez l'ValueFromPipelineByProperty si l’applet de commande accède uniquement à une propriété de l’objet.
Voici la déclaration de paramètre pour le paramètre Name de cette applet de commande Get-Proc qui accepte l’entrée de pipeline.
[Parameter(
Position = 0,
ValueFromPipeline = true,
ValueFromPipelineByPropertyName = true)]
[ValidateNotNullOrEmpty]
public string[] Name
{
get { return this.processNames; }
set { this.processNames = value; }
}
<Parameter(Position:=0, ValueFromPipeline:=True, _
ValueFromPipelineByPropertyName:=True), ValidateNotNullOrEmpty()> _
Public Property Name() As String()
Get
Return processNames
End Get
Set(ByVal value As String())
processNames = value
End Set
End Property
La déclaration précédente définit le mot clé ValueFromPipeline sur true afin que le runtime Windows PowerShell lie le paramètre à l’objet entrant si l’objet est le même type que le paramètre, ou s’il peut être coéré au même type. Le mot clé ValueFromPipelineByPropertyName est également défini sur true afin que le runtime Windows PowerShell vérifie l’objet entrant pour une propriété Name. Si l’objet entrant possède une telle propriété, le runtime lie le paramètre Name à la propriété Name de l’objet entrant.
Remarque
Le paramètre du mot clé d’attribut ValueFromPipeline pour un paramètre est prioritaire sur le paramètre du mot clé ValueFromPipelineByPropertyName.
Substitution d’une méthode de traitement d’entrée
Si votre applet de commande doit gérer l’entrée de pipeline, elle doit remplacer les méthodes de traitement d’entrée appropriées. Les méthodes de traitement d’entrée de base sont introduites dans Création de votre première applet de commande.
Cette applet de commande Get-Proc remplace la méthode System.Management.Automation.Cmdlet.ProcessRecord pour gérer l’entrée de paramètre Name fournie par l’utilisateur ou un script. Cette méthode obtient les processus pour chaque nom de processus demandé ou tous les processus si aucun nom n’est fourni. Notez que dans System.Management.Automation.Cmdlet.ProcessRecord, l’appel à WriteObject(System.Object,System.Boolean) est le mécanisme de sortie permettant d’envoyer des objets de sortie au pipeline. Le deuxième paramètre de cet appel, enumerateCollection, est défini sur true pour indiquer au runtime Windows PowerShell d’énumérer le tableau d’objets de processus et d’écrire un processus à la fois dans la ligne de commande.
protected override void ProcessRecord()
{
// If no process names are passed to the cmdlet, get all processes.
if (processNames == null)
{
// Write the processes to the pipeline making them available
// to the next cmdlet. The second argument of this call tells
// PowerShell to enumerate the array, and send one process at a
// time to the pipeline.
WriteObject(Process.GetProcesses(), true);
}
else
{
// If process names are passed to the cmdlet, get and write
// the associated processes.
foreach (string name in processNames)
{
WriteObject(Process.GetProcessesByName(name), true);
} // End foreach (string name...).
}
}
Protected Overrides Sub ProcessRecord()
Dim processes As Process()
'/ If no process names are passed to the cmdlet, get all processes.
If processNames Is Nothing Then
processes = Process.GetProcesses()
Else
'/ If process names are specified, write the processes to the
'/ pipeline to display them or make them available to the next cmdlet.
For Each name As String In processNames
'/ The second parameter of this call tells PowerShell to enumerate the
'/ array, and send one process at a time to the pipeline.
WriteObject(Process.GetProcessesByName(name), True)
Next
End If
End Sub 'ProcessRecord
Exemple de code
Pour obtenir l’exemple de code C# complet, consultez Exemple GetProcessSample03.
Définition des types d’objets et de la mise en forme
Windows PowerShell transmet des informations entre les applets de commande à l’aide d’objets .NET. Par conséquent, une applet de commande peut avoir besoin de définir son propre type, ou l’applet de commande peut avoir besoin d’étendre un type existant fourni par une autre applet de commande. Pour plus d’informations sur la définition de nouveaux types ou l’extension de types existants, consultez Extension des types d’objets et de la mise en forme.
Génération de l’applet de commande
Après avoir implémenté une applet de commande, elle doit être inscrite auprès de Windows PowerShell via un composant logiciel enfichable Windows PowerShell. Pour plus d’informations sur l’inscription d’applets de commande, consultez Guide pratique pour inscrire des applets de commande, des fournisseurs et des applications hôtes.
Test de l’applet de commande
Lorsque votre applet de commande a été inscrite auprès de Windows PowerShell, testez-la en l’exécutant sur la ligne de commande. Par exemple, testez le code de l’exemple d’applet de commande. Pour plus d’informations sur l’utilisation d’applets de commande à partir de la ligne de commande, consultez la Prise en main de Windows PowerShell.
À l’invite Windows PowerShell, entrez les commandes suivantes pour récupérer les noms de processus via le pipeline.
PS> type ProcessNames | Get-ProcLa sortie suivante s’affiche.
Handles NPM(K) PM(K) WS(K) VS(M) CPU(s) Id ProcessName ------- ------ ----- ----- ----- ------ -- ----------- 809 21 40856 4448 147 9.50 2288 iexplore 737 21 26036 16348 144 22.03 3860 iexplore 39 2 1024 388 30 0.08 3396 notepad 3927 62 71836 26984 467 195.19 1848 OUTLOOKEntrez les lignes suivantes pour obtenir les objets de processus qui ont une propriété
Nameà partir des processus appelés « IEXPLORE ». Cet exemple utilise l’applet de commandeGet-Process(fournie par Windows PowerShell) comme commande en amont pour récupérer les processus « IEXPLORE ».PS> Get-Process iexplore | Get-ProcLa sortie suivante s’affiche.
Handles NPM(K) PM(K) WS(K) VS(M) CPU(s) Id ProcessName ------- ------ ----- ----- ----- ------ -- ----------- 801 21 40720 6544 142 9.52 2288 iexplore 726 21 25872 16652 138 22.09 3860 iexplore 801 21 40720 6544 142 9.52 2288 iexplore 726 21 25872 16652 138 22.09 3860 iexplore
Voir aussi
Ajout de paramètres qui traitent les d’entrée de ligne de commande
création de votre premier d’applet de commande
extension des types d’objets et de mise en forme
Comment inscrire des applets de commande, des fournisseurs et des applications hôtes