GetProcessSample04 – exempel

Det här exemplet visar hur du implementerar en cmdlet som hämtar processerna på den lokala datorn. Det genererar ett icke-avslutande fel om ett fel inträffar när en process hämtas. Den här cmdleten är en förenklad version av cmdleten Get-Process som tillhandahålls av Windows PowerShell 2.0.

Så här skapar du exemplet med Hjälp av Visual Studio

  1. Med Windows PowerShell 2.0 SDK installerat går du till mappen GetProcessSample04. Standardplatsen är C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0\Samples\sysmgmt\WindowsPowerShell\csharp\GetProcessSample04.

  2. Dubbelklicka på ikonen för lösningsfilen (.sln). Då öppnas exempelprojektet i Visual Studio.

  3. På menyn Build väljer du Build Solution för att skapa biblioteket för exemplet i standardmapparna \bin eller \bin\debug.

Så här kör du exemplet

  1. Skapa följande modulmapp:

    [user]\Documents\WindowsPowerShell\Modules\GetProcessSample04

  2. Kopiera exempelsammansättningen till modulmappen.

  3. Starta Windows PowerShell

  4. Kör följande kommando för att läsa in sammansättningen i Windows PowerShell:

    Import-Module getprossessample04

  5. Kör följande kommando för att köra cmdleten:

    Get-Proc

Krav

Det här exemplet kräver Windows PowerShell 2.0.

Demonstrerar

Det här exemplet visar följande.

  • Deklarera en cmdlet-klass med hjälp av cmdlet-attributet.

  • Deklarera en cmdlet-parameter med parameterattributet.

  • Ange parameterns position.

  • Anger att parametern tar indata från pipelinen. Indata kan hämtas från ett objekt eller ett värde från en egenskap för ett objekt vars egenskapsnamn är samma som parameternamnet.

  • Deklarera ett valideringsattribut för parameterindata.

  • Fånga ett icke-avslutande fel och skriva ett felmeddelande till felströmmen.

Exempel

Det här exemplet visar hur du skapar en cmdlet som hanterar icke-avslutande fel och skriver felmeddelanden till felströmmen.

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
}

Se även