Freigeben über


GetProcessSample04-Beispiel

In diesem Beispiel wird gezeigt, wie Sie ein Cmdlet implementieren, das die Prozesse auf dem lokalen Computer abruft. Darin wird ein Fehler ohne Abbruch generiert, wenn es beim Abrufen eines Prozesses zu einem Fehler kommt. Dieses Cmdlet ist eine vereinfachte Version des Get-Process Cmdlets, das von Windows PowerShell 2.0 bereitgestellt wird.

Erstellen des Beispiels mit Visual Studio.

  1. Navigieren Sie bei installiertem Windows PowerShell 2.0 SDK zum Ordner GetProcessSample04. Der Standardspeicherort ist C:\Programme (x86)\Microsoft SDKs\Windows\v7.0\Samples\sysmgmt\WindowsPowerShell\csharp\GetProcessSample04.

  2. Doppelklicken Sie auf das Symbol für die Projektmappendatei (SLN). Dadurch wird das Beispielprojekt in Visual Studio geöffnet.

  3. Wählen Sie im Menü Erstellen die Option Projektmappe erstellen aus.

    Die Bibliothek für das Beispiel wird in den Standardordnern \bin oder \bin\debug erstellt.

Ausführen des Beispiels

  1. Erstellen Sie den folgenden Modulordner:

    [user]/documents/windowspowershell/modules/GetProcessSample04

  2. Kopieren Sie die Beispielassembly in den Modulordner.

  3. Starten Sie Windows PowerShell.

  4. Führen Sie den folgenden Befehl aus, um die Assembly in Windows PowerShell zu laden:

    Import-module getprossessample04

  5. Führen Sie den folgenden Befehl aus, um das Cmdlet auszuführen:

    get-proc

Anforderungen

Für dieses Beispiel ist Windows PowerShell 2.0 erforderlich.

Zeigt

In diesem Beispiel wird Folgendes veranschaulicht:

  • Deklarieren einer Cmdlet-Klasse mithilfe des Cmdlet-Attributs.

  • Deklarieren eines Cmdlet-Parameters mit dem Parameter-Attribut.

  • Angeben der Position des Parameters.

  • Geben Sie an, dass der Parameter Eingaben aus der Pipeline annimmt. Die Eingabe kann aus einem Objekt oder einem Wert aus einer Eigenschaft eines Objekts stammen, dessen Eigenschaftenname mit dem Parameternamen identisch ist.

  • Deklarieren eines Validierungsattributs für die Parametereingabe.

  • Abfangen eines nicht determinierenden Fehlers und Schreiben einer Fehlermeldung in den Fehlerstream.

Beispiel

In diesem Beispiel wird gezeigt, wie Sie ein Cmdlet erstellen, das nicht determinierende Fehler behandelt und Fehlermeldungen in den Fehlerstream schreibt.

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
}

Weitere Informationen

Schreiben eines Windows PowerShell-Cmdlets