Partager via


Exemple GetProcessSample04

Cet exemple montre comment implémenter une applet de commande qui récupère les processus sur l’ordinateur local. Elle génère une erreur sans fin si une erreur se produit lors de la récupération d’un processus. Cette applet de commande est une version simplifiée de l’applet de commande Get-Process fournie par Windows PowerShell 2.0.

Comment générer l’exemple à l’aide de Visual Studio

  1. Une fois le Kit de développement logiciel (SDK) Windows PowerShell 2.0 installé, accédez au dossier GetProcessSample04. L’emplacement par défaut est C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0\Samples\sysmgmt\WindowsPowerShell\csharp\GetProcessSample04.

  2. Double-cliquez sur l’icône du fichier de solution (.sln). L’exemple de projet s’ouvre dans Visual Studio.

  3. Dans le menu Générer, sélectionnez Générer la solution pour générer la bibliothèque pour l’exemple dans les dossiers \bin ou \bin\debug par défaut.

Comment exécuter l’exemple

  1. Créez le dossier de module suivant :

    [user]\Documents\WindowsPowerShell\Modules\GetProcessSample04

  2. Copiez l’exemple d’assembly dans le dossier du module.

  3. Démarrez Windows PowerShell.

  4. Exécutez la commande suivante pour charger l’assembly dans Windows PowerShell :

    Import-Module getprossessample04

  5. Exécutez la commande suivante pour exécuter l’applet de commande :

    Get-Proc

Spécifications

Cet exemple nécessite Windows PowerShell 2.0.

Montre ce qui suit

Cet exemple illustre ce qui suit.

  • Déclaration d’une classe d’applet de commande à l’aide de l’attribut Cmdlet.

  • Déclaration d’un paramètre d’applet de commande à l’aide de l’attribut Parameter.

  • Spécification de la position du paramètre.

  • Spécification du paramètre qui prend l’entrée du pipeline. L’entrée peut être extraite d’un objet ou d’une valeur d’une propriété d’un objet dont le nom de propriété est identique au nom du paramètre.

  • Déclaration d’un attribut de validation pour l’entrée de paramètre.

  • Intercepter une erreur sans fin et écrire un message d’erreur dans le flux d’erreurs.

Exemple :

Cet exemple montre comment créer une applet de commande qui gère les erreurs sans fin et écrit des messages d’erreur dans le flux d’erreurs.

namespace Microsoft.Samples.PowerShell.Commands
{
    using System;
    using System.Diagnostics;
    using System.Management.Automation;      // Windows PowerShell namespace.
   #region GetProcCommand

   /// <summary>
   /// This class implements the Get-Proc cmdlet.
   /// </summary>
   [Cmdlet(VerbsCommon.Get, "Proc")]
   public class GetProcCommand : Cmdlet
   {
      #region Parameters

       /// <summary>
       /// The names of the processes to act on.
       /// </summary>
       private string[] processNames;

      /// <summary>
      /// Gets or sets the list of process names on
      /// which the Get-Proc cmdlet will work.
      /// </summary>
      [Parameter(
         Position = 0,
         ValueFromPipeline = true,
         ValueFromPipelineByPropertyName = true)]
      [ValidateNotNullOrEmpty]
      public string[] Name
      {
         get { return this.processNames; }
         set { this.processNames = value; }
      }

      #endregion Parameters

      #region Cmdlet Overrides

      /// <summary>
      /// The ProcessRecord method calls the Process.GetProcesses
      /// method to retrieve the processes specified by the Name
      /// parameter. Then, the WriteObject method writes the
      /// associated processes to the pipeline.
      /// </summary>
      protected override void ProcessRecord()
      {
          // If no process names are passed to cmdlet, get all
          // processes.
          if (this.processNames == null)
          {
              WriteObject(Process.GetProcesses(), true);
          }
          else
          {
              // If process names are passed to the cmdlet, get and write
              // the associated processes.
              // If a non-terminating error occurs while retrieving processes,
              // call the WriteError method to send an error record to the
              // error stream.
              foreach (string name in this.processNames)
              {
                  Process[] processes;

                  try
                  {
                      processes = Process.GetProcessesByName(name);
                  }
                  catch (InvalidOperationException ex)
                  {
                      WriteError(new ErrorRecord(
                         ex,
                         "UnableToAccessProcessByName",
                         ErrorCategory.InvalidOperation,
                         name));
                      continue;
                  }

                  WriteObject(processes, true);
              } // foreach (string name...
          } // else
      } // ProcessRecord

      #endregion Overrides
    } // End GetProcCommand class.

   #endregion GetProcCommand
}

Voir aussi