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


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

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

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

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

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

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

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

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

    [user]\Documents\WindowsPowerShell\Modules\GetProcessSample03

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

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

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

    Import-Module getprossessample03

  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 names of the
    /// process that the cmdlet will retrieve.
    /// </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 the 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.
        foreach (string name in this.processNames)
        {
          WriteObject(Process.GetProcessesByName(name), true);
        }
      } // End if (processNames ...)
    } // End ProcessRecord.

    #endregion Overrides
  } // End GetProcCommand.
  #endregion GetProcCommand
}

См. также