Поделиться через


Пример командлета GetProcessSample02

В этом примере показано, как написать командлет, который извлекает процессы на локальном компьютере. Он предоставляет параметр Name, который можно использовать для указания процессов, которые необходимо извлечь. Этот командлет является упрощенной версией командлета Get-Process, предоставляемого Windows PowerShell 2.0.

Создание примера с помощью Visual Studio

  1. Установив пакет SDK для Windows PowerShell 2.0, перейдите в папку GetProcessSample02. По умолчанию он расположен в папке C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0\Samples\sysmgmt\WindowsPowerShell\csharp\GetProcessSample02.

  2. Дважды щелкните значок для файла решения (.sln). Откроется пример проекта в Visual Studio.

  3. В меню Сборка выберите Сборка решения, чтобы создать библиотеку для примера в папках \bin по умолчанию или \bin\debug.

Запуск примера

  1. Создайте следующую папку модуля:

    [user]\Documents\WindowsPowerShell\Modules\GetProcessSample02

  2. Скопируйте пример сборки в папку модуля.

  3. Запустите Windows PowerShell.

  4. Выполните следующую команду, чтобы загрузить сборку в Windows PowerShell:

    Import-Module getprossessample02

  5. Выполните следующую команду, чтобы запустить командлет:

    Get-Proc

Требования

Для этого примера требуется Windows PowerShell 2.0.

Демонстрирует

В этом примере показано следующее.

  • Объявление класса командлета с помощью атрибута Командлета.

  • Объявление параметра командлета с помощью атрибута Параметра.

  • Указание позиции параметра.

  • Объявление атрибута проверки для входных данных параметра.

Пример

В этом примере показана реализация командлета Get-Proc, включающего параметр Name.

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 retrieved by the cmdlet.
    /// </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)]
    [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 process objects to the pipeline.
    /// </summary>
    protected override void ProcessRecord()
    {
      // If no process names are passed to the cmdlet, get all
      // processes.
      if (this.processNames == null)
      {
        WriteObject(Process.GetProcesses(), true);
      }
      else
      {
        // If process names are passed to cmdlet, get and write
        // the associated processes.
        foreach (string name in this.processNames)
        {
          WriteObject(Process.GetProcessesByName(name), true);
        }
      } // End if (processNames...).
    } // End ProcessRecord.
    #endregion Cmdlet Overrides
  } // End GetProcCommand class.
  #endregion GetProcCommand
}

См. также