Esempio di GetProcessSample04

Questo esempio illustra come implementare un cmdlet che recupera i processi nel computer locale. Genera un errore non irreversibile se si verifica un errore durante il recupero di un processo. Questo cmdlet è una versione semplificata del Get-Process cmdlet fornita da Windows PowerShell 2.0.

Come compilare l'esempio usando Visual Studio.

  1. Con l Windows PowerShell SDK 2.0 installato, passare alla cartella GetProcessSample04. Il percorso predefinito è C:\Programmi (x86)\Microsoft SDKs\Windows\v7.0\Samples\sysmgmt\WindowsPowerShell\csharp\GetProcessSample04.

  2. Fare doppio clic sull'icona per il file di soluzione (sln). Verrà aperto il progetto di esempio in Visual Studio.

  3. Scegliere Compila soluzione dal menu Compila.

    La libreria per l'esempio verrà compilata nelle cartelle \bin o \bin\debug predefinite.

Per eseguire l'esempio

  1. Creare la cartella del modulo seguente:

    [user]/documents/windowspowershell/modules/GetProcessSample04

  2. Copiare l'assembly di esempio nella cartella del modulo.

  3. Avviare Windows PowerShell.

  4. Eseguire il comando seguente per caricare l'assembly in Windows PowerShell:

    Import-module getprossessample04

  5. Eseguire il comando seguente per eseguire il cmdlet :

    get-proc

Requisiti

Questo esempio richiede Windows PowerShell 2.0.

Dimostra

Questo esempio illustra quanto segue.

  • Dichiarazione di una classe di cmdlet tramite l'attributo Cmdlet.

  • Dichiarazione di un parametro del cmdlet tramite l'attributo Parameter.

  • Specifica della posizione del parametro.

  • Specifica che il parametro accetta input dalla pipeline. L'input può essere tratto da un oggetto o da un valore di una proprietà di un oggetto il cui nome della proprietà è lo stesso del nome del parametro.

  • Dichiarazione di un attributo di convalida per l'input del parametro.

  • Trapping di un errore non di sterminazione e scrittura di un messaggio di errore nel flusso degli errori.

Esempio

In questo esempio viene illustrato come creare un cmdlet che gestisce gli errori non erminanti e scrive messaggi di errore nel flusso degli errori.

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 nonterminating 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
}

Vedere anche

Scrittura di un cmdlet di Windows PowerShell