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.
Informations sur les ensembles de paramètres
Windows PowerShell définit un jeu de paramètres en tant que groupe de paramètres qui fonctionnent ensemble. En regroupant les paramètres d’une applet de commande, vous pouvez créer une applet de commande unique qui peut modifier ses fonctionnalités en fonction du groupe de paramètres spécifié par l’utilisateur.
Un exemple d’applet de commande qui utilise deux ensembles de paramètres pour définir différentes fonctionnalités est l’applet de commande Get-EventLog fournie par Windows PowerShell. Cette applet de commande retourne des informations différentes lorsque l’utilisateur spécifie le paramètre List ou LogName. Si le paramètre LogName est spécifié, l’applet de commande retourne des informations sur les événements dans un journal des événements donné. Si le paramètre List est spécifié, l’applet de commande retourne des informations sur les fichiers journaux eux-mêmes (et non les informations d’événement qu’ils contiennent). Dans ce cas, les paramètres List et LogName identifient deux jeux de paramètres distincts.
Deux éléments importants à retenir concernant les jeux de paramètres sont que le runtime Windows PowerShell utilise un seul jeu de paramètres pour une entrée particulière, et que chaque jeu de paramètres doit avoir au moins un paramètre unique pour ce jeu de paramètres.
Pour illustrer ce dernier point, cette applet de commande Stop-Proc utilise trois jeux de paramètres : ProcessName, ProcessIdet InputObject. Chacun de ces jeux de paramètres a un paramètre qui n’est pas dans les autres jeux de paramètres. Les jeux de paramètres peuvent partager d’autres paramètres, mais l’applet de commande utilise les paramètres uniques ProcessName, ProcessIdet InputObject pour identifier l’ensemble de paramètres que le runtime Windows PowerShell doit utiliser.
Déclaration 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. Pour cette applet de commande, le verbe de cycle de vie « Stop » est utilisé, car l’applet de commande arrête les processus système. Le nom de nom « Proc » est utilisé, car l’applet de commande fonctionne sur les processus. Dans la déclaration ci-dessous, notez que le verbe et le nom de l’applet de commande sont reflétés dans le nom de la classe d’applet de commande.
Remarque
Pour plus d’informations sur les noms de verbes d’applet de commande approuvés, consultez noms de verbes d’applet de commande.
Le code suivant est la définition de classe pour cette applet de commande Stop-Proc.
[Cmdlet(VerbsLifecycle.Stop, "Proc",
DefaultParameterSetName = "ProcessId",
SupportsShouldProcess = true)]
public class StopProcCommand : PSCmdlet
<Cmdlet(VerbsLifecycle.Stop, "Proc", DefaultParameterSetName:="ProcessId", _
SupportsShouldProcess:=True)> _
Public Class StopProcCommand
Inherits PSCmdlet
Déclaration des paramètres de l’applet de commande
Cette applet de commande définit trois paramètres nécessaires en entrée à l’applet de commande (ces paramètres définissent également les jeux de paramètres), ainsi qu’un paramètre Force qui gère ce que fait l’applet de commande et un paramètre PassThru qui détermine si l’applet de commande envoie un objet de sortie via le pipeline. Par défaut, cette applet de commande ne transmet pas d’objet via le pipeline. Pour plus d’informations sur ces deux derniers paramètres, consultez Création d’une applet de commande qui modifie le système.
Déclaration du paramètre Name
Ce paramètre d’entrée permet à l’utilisateur de spécifier les noms des processus à arrêter. Notez que le mot clé d’attribut ParameterSetName de l’attribut System.Management.Automation.ParameterAttribute spécifie le paramètre ProcessName défini pour ce paramètre.
[Parameter(
Position = 0,
ParameterSetName = "ProcessName",
Mandatory = true,
ValueFromPipeline = true,
ValueFromPipelineByPropertyName = true,
HelpMessage = "The name of one or more processes to stop. Wildcards are permitted."
)]
[Alias("ProcessName")]
public string[] Name
{
get { return processNames; }
set { processNames = value; }
}
private string[] processNames;
<Parameter(Position:=0, ParameterSetName:="ProcessName", _
Mandatory:=True, _
ValueFromPipeline:=True, ValueFromPipelineByPropertyName:=True, _
HelpMessage:="The name of one or more processes to stop. " & _
"Wildcards are permitted."), [Alias]("ProcessName")> _
Public Property Name() As String()
Get
Return processNames
End Get
Set(ByVal value As String())
processNames = value
End Set
End Property
Private processNames() As String
Notez également que l’alias « ProcessName » est attribué à ce paramètre.
Déclaration du paramètre ID
Ce paramètre d’entrée permet à l’utilisateur de spécifier les identificateurs des processus à arrêter. Notez que le mot clé d’attribut ParameterSetName de l’attribut System.Management.Automation.ParameterAttribute spécifie le jeu de paramètres ProcessId.
[Parameter(
ParameterSetName = "ProcessId",
Mandatory = true,
ValueFromPipelineByPropertyName = true,
ValueFromPipeline = true
)]
[Alias("ProcessId")]
public int[] Id
{
get { return processIds; }
set { processIds = value; }
}
private int[] processIds;
<Parameter(ParameterSetName:="ProcessId", _
Mandatory:=True, _
ValueFromPipelineByPropertyName:=True, _
ValueFromPipeline:=True), [Alias]("ProcessId")> _
Public Property Id() As Integer()
Get
Return processIds
End Get
Set(ByVal value As Integer())
processIds = value
End Set
End Property
Private processIds() As Integer
Notez également que l’alias « ProcessId » est attribué à ce paramètre.
Déclaration du paramètre InputObject
Ce paramètre d’entrée permet à l’utilisateur de spécifier un objet d’entrée qui contient des informations sur les processus à arrêter. Notez que le mot clé d’attribut ParameterSetName de l’attribut System.Management.Automation.ParameterAttribute spécifie le paramètre InputObject défini pour ce paramètre.
[Parameter(
ParameterSetName = "InputObject",
Mandatory = true,
ValueFromPipeline = true)]
public Process[] InputObject
{
get { return inputObject; }
set { inputObject = value; }
}
private Process[] inputObject;
<Parameter(ParameterSetName:="InputObject", _
Mandatory:=True, ValueFromPipeline:=True)> _
Public Property InputObject() As Process()
Get
Return myInputObject
End Get
Set(ByVal value As Process())
myInputObject = value
End Set
End Property
Private myInputObject() As Process
Notez également que ce paramètre n’a pas d’alias.
Déclaration de paramètres dans plusieurs jeux de paramètres
Bien qu’il doit y avoir un paramètre unique pour chaque jeu de paramètres, les paramètres peuvent appartenir à plusieurs ensembles de paramètres. Dans ce cas, attribuez au paramètre partagé un System.Management.Automation.ParameterAttribute déclaration d’attribut pour chaque jeu auquel appartient le paramètre. Si un paramètre se trouve dans tous les jeux de paramètres, vous devez uniquement déclarer l’attribut de paramètre une seule fois et n’avez pas besoin de spécifier le nom du jeu de paramètres.
Substitution d’une méthode de traitement d’entrée
Chaque applet de commande doit remplacer une méthode de traitement d’entrée, le plus souvent, il s’agit de la méthode System.Management.Automation.Cmdlet.ProcessRecord. Dans cette applet de commande, la méthode System.Management.Automation.Cmdlet.ProcessRecord est substituée afin que l’applet de commande puisse traiter n’importe quel nombre de processus. Il contient une instruction Select qui appelle une autre méthode en fonction du paramètre spécifié par l’utilisateur.
protected override void ProcessRecord()
{
switch (ParameterSetName)
{
case "ProcessName":
ProcessByName();
break;
case "ProcessId":
ProcessById();
break;
case "InputObject":
foreach (Process process in inputObject)
{
SafeStopProcess(process);
}
break;
default:
throw new ArgumentException("Bad ParameterSet Name");
} // switch (ParameterSetName...
} // ProcessRecord
Protected Overrides Sub ProcessRecord()
Select Case ParameterSetName
Case "ProcessName"
ProcessByName()
Case "ProcessId"
ProcessById()
Case "InputObject"
Dim process As Process
For Each process In myInputObject
SafeStopProcess(process)
Next process
Case Else
Throw New ArgumentException("Bad ParameterSet Name")
End Select
End Sub 'ProcessRecord ' ProcessRecord
Les méthodes d’assistance appelées par l’instruction Select ne sont pas décrites ici, mais vous pouvez voir leur implémentation dans l’exemple de code complet dans la section suivante.
Exemple de code
Pour obtenir l’exemple de code C# complet, consultez Exemple deStopProcessSample04.
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, vous devez l’inscrire 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. Voici quelques tests qui montrent comment les paramètres ProcessId et InputObject peuvent être utilisés pour tester leurs ensembles de paramètres pour arrêter un processus.
Avec Windows PowerShell démarré, exécutez l’applet de commande Stop-Proc avec le paramètre
ProcessIddéfini pour arrêter un processus en fonction de son identificateur. Dans ce cas, l’applet de commande utilise le paramètreProcessIddéfini pour arrêter le processus.PS> Stop-Proc -Id 444 Confirm Are you sure you want to perform this action? Performing operation "Stop-Proc" on Target "notepad (444)". [Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "Y"): YLorsque Windows PowerShell a démarré, exécutez l’applet de commande Stop-Proc avec le paramètre
InputObjectdéfini pour arrêter les processus sur l’objet Bloc-notes récupéré par la commandeGet-Process.PS> Get-Process notepad | Stop-Proc Confirm Are you sure you want to perform this action? Performing operation "Stop-Proc" on Target "notepad (444)". [Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "Y"): N
Voir aussi
Création d’une applet de commande qui modifie le système
Comment créer une applet de commande Windows PowerShell
extension des types d’objets et de mise en forme
Comment inscrire des applets de commande, des fournisseurs et des applications hôtes