Przykład GetProcessSample04

W tym przykładzie pokazano, jak zaimplementować polecenie cmdlet, które pobiera procesy na komputerze lokalnym. Generuje błąd nieokreślony, jeśli wystąpi błąd podczas pobierania procesu. To polecenie cmdlet jest uproszczoną wersją polecenia cmdlet dostarczanego przez program Get-Process Windows PowerShell 2.0.

Jak skompilować przykład przy użyciu Visual Studio.

  1. Po zainstalowaniu Windows PowerShell 2.0 SDK przejdź do folderu GetProcessSample04. Domyślna lokalizacja to C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0\Samples\sysmgmt\WindowsPowerShell\csharp\GetProcessSample04.

  2. Kliknij dwukrotnie ikonę pliku rozwiązania (sln). Spowoduje to otwarcie przykładowego projektu w Visual Studio.

  3. W menu Kompilacja wybierz pozycję Build Solution (Skompilowanie rozwiązania).

    Biblioteka dla przykładu zostanie s zbudowana w domyślnych folderach \bin lub \bin\debug.

Jak uruchomić przykład

  1. Utwórz następujący folder modułu:

    [user]/documents/windowspowershell/modules/GetProcessSample04

  2. Skopiuj przykładowy zestaw do folderu modułu.

  3. Uruchom program Windows PowerShell.

  4. Uruchom następujące polecenie, aby załadować zestaw do Windows PowerShell:

    Import-module getprossessample04

  5. Uruchom następujące polecenie, aby uruchomić polecenie cmdlet:

    get-proc

Wymagania

Ten przykład wymaga Windows PowerShell 2.0.

Demonstracje

W tym przykładzie przedstawiono następujące informacje.

  • Deklarowanie klasy polecenia cmdlet przy użyciu atrybutu polecenia cmdlet .

  • Deklarowanie parametru polecenia cmdlet przy użyciu atrybutu Parameter.

  • Określanie pozycji parametru.

  • Określenie, że parametr przyjmuje dane wejściowe z potoku. Dane wejściowe można uzyskać z obiektu lub wartości z właściwości obiektu, którego nazwa właściwości jest taka sama jak nazwa parametru.

  • Deklarowanie atrybutu walidacji dla danych wejściowych parametru.

  • Wyłaszczanie nieokreślonego błędu i zapisywanie komunikatu o błędzie do strumienia błędów.

Przykład

W tym przykładzie pokazano, jak utworzyć polecenie cmdlet, które obsługuje błędy nieokreślone i zapisuje komunikaty o błędach do strumienia błędów.

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
}

Zobacz też

Pisanie polecenia cmdlet programu Windows PowerShell