Добавление пользовательских сообщений в командлет

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

  • Подробные сообщения, содержащие общие сведения о пользователях.

  • Сообщения отладки, содержащие сведения об устранении неполадок.

  • Предупреждающие сообщения, содержащие уведомление о том, что командлет собирается выполнить операцию, которая может привести к непредвиденным результатам.

  • Сообщения отчета о состоянии, содержащие сведения о том, сколько работы командлета выполнила при выполнении операции, которая занимает много времени.

Количество сообщений, которые может записывать командлет, и тип сообщений, записываемых командлетом, не ограничены. Каждое сообщение записывается путем выполнения определенного вызова в методе обработки входных данных командлета.

Определение командлета

Первым шагом при создании командлета всегда является присвоение имени командлета и объявление класса .NET, реализующего командлет. Любой командлет может записывать пользовательские уведомления из своих методов обработки входных данных. Таким образом, можно присвоить этому командлету имя, используя любую команду, которая указывает, какие изменения системы выполняет командлет. Дополнительные сведения о утвержденных командах командлетов см. в разделе имена глаголов командлетов.

Командлет Stop-Proc предназначен для изменения системы; Поэтому объявление System. Management. Automation. CmdletAttribute для класса .NET должно включать SupportsShouldProcess ключевое слово Attribute и иметь значение true .

Следующий код является определением для данного класса командлета Stop-Proc. Дополнительные сведения об этом определении см. в разделе Создание командлета, изменяющего систему.

[Cmdlet(VerbsLifecycle.Stop, "proc",
        SupportsShouldProcess = true)]
public class StopProcCommand : Cmdlet

Определение параметров для изменения системы

Командлет Stop-Proc определяет три параметра: Name , Force и PassThru . Дополнительные сведения об определении этих параметров см. в разделе Создание командлета, изменяющего систему.

Ниже приведено объявление параметра для командлета Stop-Proc.

[Parameter(
           Position = 0,
           Mandatory = true,
           ValueFromPipeline = true,
           ValueFromPipelineByPropertyName = true
)]
public string[] Name
{
  get { return processNames; }
  set { processNames = value; }
}
private string[] processNames;

/// <summary>
/// Specify the Force parameter that allows the user to override
/// the ShouldContinue call to force the stop operation. This
/// parameter should always be used with caution.
/// </summary>
[Parameter]
public SwitchParameter Force
{
  get { return force; }
  set { force = value; }
}
private bool force;

/// <summary>
/// Specify the PassThru parameter that allows the user to specify
/// that the cmdlet should pass the process object down the pipeline
/// after the process has been stopped.
/// </summary>
[Parameter]
public SwitchParameter PassThru
{
  get { return passThru; }
  set { passThru = value; }
}
private bool passThru;

Переопределение метода обработки входных данных

Командлет должен переопределять метод обработки ввода, чаще всего это будет System. Management. Automation. командлет. ProcessRecord. Этот командлет Stop-Proc переопределяет метод обработки ввода System. Management. Automation. командлет. ProcessRecord . В этой реализации командлета Stop-Proc выполняются вызовы для записи подробных сообщений, сообщений отладки и предупреждающих сообщений.

Примечание

Дополнительные сведения о том, как этот метод вызывает методы System. Management. Automation. командлет. ShouldProcess и System. Management. Automation. командлет. ShouldContinue , см. в разделе Создание командлета, изменяющего систему.

Запись подробного сообщения

Метод System. Management. Automation. командлет. вритевербосе используется для записи общих сведений на уровне пользователя, не связанных с конкретными условиями ошибок. Затем системный администратор может использовать эти сведения для продолжения обработки других команд. Кроме того, любые сведения, написанные с помощью этого метода, должны быть локализованы по мере необходимости.

В следующем коде из этого командлета Stop-Proc показаны два вызова метода System. Management. Automation. командлет. вритевербосе из переопределения метода System. Management. Automation. командлета. ProcessRecord .

message = String.Format("Attempting to stop process \"{0}\".", name);
WriteVerbose(message);
message = String.Format("Stopped process \"{0}\", pid {1}.",
                        processName, process.Id);

WriteVerbose(message);

Запись сообщения об отладке

Метод System. Management. Automation. командлет. вритедебуг используется для записи отладочных сообщений, которые можно использовать для устранения неполадок в работе командлета. Вызов выполняется из метода обработки входных данных.

Примечание

Windows PowerShell также определяет Debug параметр, который предоставляет как подробную, так и отладочную информацию. Если командлет поддерживает этот параметр, ему не нужно вызывать System. Management. Automation. командлет. вритедебуг в том же коде, который вызывает System. Management. Automation. командлет. вритевербосе.

Следующие два раздела кода из примера Stop-Proc командлета показывают вызовы метода System. Management. Automation. командлет. вритедебуг из переопределения метода System. Management. Automation. командлета. ProcessRecord .

Это сообщение отладки записывается непосредственно перед вызовом System. Management. Automation. командлет. ShouldProcess .

message =
          String.Format("Acquired name for pid {0} : \"{1}\"",
                       process.Id, processName);
WriteDebug(message);

Это сообщение отладки записывается непосредственно перед вызовом System. Management. Automation. командлет. WriteObject .

message =
         String.Format("Writing process \"{0}\" to pipeline",
         processName);
WriteDebug(message);
WriteObject(process);

Windows PowerShell автоматически направляет любые вызовы System. Management. Automation. командлет. вритедебуг в инфраструктуру трассировки и командлеты. Это позволяет отслеживать вызовы методов для ведущего приложения, файла или отладчика без необходимости выполнять какие-либо дополнительные действия по разработке в командлете. Следующая запись командной строки реализует операцию трассировки.

PS> трассировка-выражение "Trace-proc-File proc. log-Command"

Создание сообщения с предупреждением

Метод System. Management. Automation. командлет. вритеварнинг используется для записи предупреждения о том, что командлет собирается выполнить операцию, которая может иметь непредвиденный результат, например перезапись файла, доступного только для чтения.

В следующем коде из командлета Sample Stop-Proc показан вызов метода System. Management. Automation. командлет. вритеварнинг из переопределения метода System. Management. Automation. командлета. ProcessRecord .

 if (criticalProcess)
 {
   message =
             String.Format("Stopping the critical process \"{0}\".",
                           processName);
   WriteWarning(message);
} // if (criticalProcess...

Запись сообщения о ходе выполнения

System. Management. Automation. командлет. вритепрогресс используется для записи сообщений о ходе выполнения, когда выполнение операций командлета занимает продолжительное время. Вызов System. Management. Automation. командлет. вритепрогресс передает объект System. Management. Automation. Progressrecord , который отправляется в приложение размещения для отрисовки пользователю.

Примечание

Этот командлет Stop-Proc не включает вызов метода System. Management. Automation. командлета. вритепрогресс .

Следующий код является примером сообщения о ходе выполнения, написанного командлетом, который пытается скопировать элемент.

int myId = 0;
string myActivity = "Copy-item: Copying *.* to c:\abc";
string myStatus = "Copying file bar.txt";
ProgressRecord pr = new ProgressRecord(myId, myActivity, myStatus);
WriteProgress(pr);

pr.RecordType = ProgressRecordType.Completed;
WriteProgress(pr);

Образец кода

Полный пример кода на C# см. в разделе StopProcessSample02 Sample.

Определение типов объектов и форматирование

Windows PowerShell передает сведения между командлетами с помощью объектов .net. Следовательно, командлету может потребоваться определить собственный тип, или командлету может потребоваться расширить существующий тип, предоставленный другим командлетом. Дополнительные сведения об определении новых типов или расширении существующих типов см. в разделе расширение типов объектов и форматирование.

Создание командлета

после реализации командлета его необходимо зарегистрировать в Windows PowerShell с помощью оснастки Windows PowerShell. Дополнительные сведения о регистрации командлетов см. в разделе Регистрация командлетов, поставщиков и ведущих приложений.

Тестирование командлета

если командлет зарегистрирован в Windows PowerShell, его можно проверить, запустив его в командной строке. Давайте протестируем пример командлета Stop-Proc. Дополнительные сведения об использовании командлетов из командной строки см. в Начало работы с Windows PowerShell.

  • Следующая запись командной строки использует Stop-Proc для завершения процесса с именем "Блокнот", предоставления подробных уведомлений и печати отладочной информации.

    PS> stop-proc -Name notepad -Verbose -Debug
    

    Появится следующий результат.

    VERBOSE: Attempting to stop process " notepad ".
    DEBUG: Acquired name for pid 5584 : "notepad"
    
    Confirm
    Continue with this operation?
    [Y] Yes  [A] Yes to All  [H] Halt Command  [S] Suspend  [?] Help (default is "Y"): Y
    
    Confirm
    Are you sure you want to perform this action?
    Performing operation "stop-proc" on Target "notepad (5584)".
    [Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "Y"): Y
    VERBOSE: Stopped process "notepad", pid 5584.
    

См. также:

Создание командлета, изменяющего систему

создание командлета Windows PowerShell

Расширение типов объектов и форматирование

Регистрация командлетов, поставщиков и ведущих приложений

Пакет SDK для Windows PowerShell