Partilhar via


GetProcessSample04 Sample (Exemplo GetProcessSample04)

Este exemplo mostra como implementar um cmdlet que recupera os processos no computador local. Ele gera um erro de não terminação se ocorrer um erro ao recuperar um processo. Este cmdlet é uma versão simplificada do cmdlet Get-Process fornecido pelo Windows PowerShell 2.0.

Como criar o exemplo usando o Visual Studio

  1. Com o SDK do Windows PowerShell 2.0 instalado, navegue até a pasta GetProcessSample04. O local padrão é C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0\Samples\sysmgmt\WindowsPowerShell\csharp\GetProcessSample04.

  2. Clique duas vezes no ícone do arquivo de solução (.sln). Isso abre o projeto de exemplo no Visual Studio.

  3. No menu Build, selecione Build Solution para criar a biblioteca para o exemplo nas pastas \bin ou \bin\debug padrão.

Como executar o exemplo

  1. Crie a seguinte pasta de módulo:

    [user]\Documents\WindowsPowerShell\Modules\GetProcessSample04

  2. Copie o assembly de exemplo para a pasta do módulo.

  3. Inicie o Windows PowerShell.

  4. Execute o seguinte comando para carregar o assembly no Windows PowerShell:

    Import-Module getprossessample04

  5. Execute o seguinte comando para executar o cmdlet:

    Get-Proc

Requerimentos

Este exemplo requer o Windows PowerShell 2.0.

Demonstra

Este exemplo demonstra o seguinte.

  • Declarando uma classe de cmdlet usando o atributo Cmdlet.

  • Declarando um parâmetro de cmdlet usando o atributo Parameter.

  • Especificando a posição do parâmetro.

  • Especificando que o parâmetro recebe entrada do pipeline. A entrada pode ser obtida de um objeto ou um valor de uma propriedade de um objeto cujo nome de propriedade é o mesmo que o nome do parâmetro.

  • Declarando um atributo de validação para a entrada do parâmetro.

  • Intercetar um erro não terminativo e escrever uma mensagem de erro no fluxo de erros.

Exemplo

Este exemplo mostra como criar um cmdlet que lida com erros não terminativos e grava mensagens de erro no fluxo de erros.

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
}

Ver também