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


Запрос на подтверждение от командлетов

Командлеты должны запрашивать подтверждение, когда они собираются внести изменения в систему, которая находится за пределами среды Windows PowerShell. Например, если командлет должен добавить учетную запись пользователя или остановить процесс, командлет должен требовать подтверждения от пользователя перед продолжением. В отличие от этого, если командлет собирался изменить переменную Windows PowerShell, командлет не требует подтверждения.

Чтобы сделать запрос на подтверждение, командлет должен указать, что он поддерживает запросы на подтверждение, и он должен вызывать методы System.Management.Automation.Командлет.ShouldProcess и System.Management.Automation.Командлет.ShouldContinue (необязательно) для отображения сообщения запроса подтверждения.

Поддержка запросов на подтверждение

Чтобы поддерживать запросы на подтверждение, командлет должен задать параметр SupportsShouldProcess атрибута Командлета true. Это позволяет использовать параметры командлета Confirm и WhatIf, предоставляемые Windows PowerShell. Параметр Confirm позволяет пользователю управлять отображением запроса подтверждения. Параметр WhatIf позволяет пользователю определить, должен ли командлет отображать сообщение или выполнять его действие. Не добавляйте в командлет параметры Confirm и WhatIf вручную.

В следующем примере показано объявление атрибута командлета, которое поддерживает запросы на подтверждение.

[Cmdlet(VerbsDiagnostic.Test, "RequestConfirmationTemplate1",
        SupportsShouldProcess = true)]

Вызов методов запроса подтверждения

В коде командлета вызовите метод System.Management.Automation.Командлет.ShouldProcess перед выполнением операции, которая изменяет систему. Создайте командлет таким образом, чтобы при вызове возвращалось значение false, операция не выполняется, а командлет обрабатывает следующую операцию.

Вызов метода ShouldContinue

Большинство командлетов запрашивают подтверждение, используя только метод System.Management.Automation.Командлет.ShouldProcess. Однако в некоторых случаях может потребоваться дополнительное подтверждение. В этих случаях добавьте вызов System.Management.Automation.Командлет.ShouldProcess вызовом метода System.Management.Automation.Cmdlet.ShouldContinue. Это позволяет командлету или поставщику более точно управлять областью Да для всех ответа на запрос подтверждения.

Если командлет вызывает метод System.Management.Automation.Командлет.ShouldContinue, командлет также должен предоставить параметр коммутатора Force. Если пользователь указывает Force при вызове командлета, командлет по-прежнему должен вызывать System.Management.Automation.Cmdlet.ShouldProcess, но он должен обойти вызов System.Management.Automation.Командлет.ShouldContinue.

System.Management.Automation.Командлет.ShouldContinue создает исключение при вызове из неинтерактивной среды, в которой пользователю не удается выполнить запрос. Добавление параметра Force гарантирует, что команда по-прежнему может выполняться при вызове в неинтерактивной среде.

В следующем примере показано, как вызвать System.Management.Automation.Командлет.ShouldProcess и System.Management.Automation.Командлет.ShouldContinue.

if (ShouldProcess (...) )
{
  if (Force || ShouldContinue(...))
  {
     // Add code that performs the operation.
  }
}

Поведение вызова System.Management.Automation.Командлет.ShouldProcess может отличаться в зависимости от среды, в которой вызывается командлет. Используя предыдущие рекомендации, командлет будет работать согласованно с другими командлетами независимо от среды узла.

Пример вызова метода System.Management.Automation.Командлет.ShouldProcess см. в разделе Запрос подтверждения.

Указание уровня влияния

При создании командлета укажите уровень влияния (серьезность) изменения. Для этого задайте для параметра ConfirmImpact атрибута Командлета значение High, Medium или Low. Можно указать значение для ConfirmImpact только при указании параметра SupportsShouldProcess для командлета.

Для большинства командлетов не нужно явно указывать ConfirmImpact. Вместо этого используйте параметр по умолчанию параметра, который является средним. Если задать для ConfirmImpact значение High, операция будет подтверждена по умолчанию. Зарезервировать этот параметр для сложных действий, таких как переформатирование тома жесткого диска.

Вызов методов без подтверждения

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

  • Чтобы предупредить пользователя и продолжить работу, командлет или поставщик может вызвать метод System.Management.Automation.Командлет.WriteWarning.

  • Чтобы предоставить дополнительные сведения, которые пользователь может получить с помощью параметра Verbose, командлет или поставщик может вызвать метод System.Management.Automation.Командлет.WriteVerbose.

  • Чтобы предоставить подробные сведения об уровне отладки для других разработчиков или для поддержки продуктов, командлет или поставщик может вызвать метод System.Management.Automation.Командлет.WriteDebug. Пользователь может получить эти сведения с помощью параметра Debug.

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

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

См. также

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