请求 Cmdlet 确认

Cmdlet 应在即将更改外部环境的系统时请求Windows PowerShell确认。 例如,如果 cmdlet 即将添加用户帐户或停止进程,则 cmdlet 应在继续操作之前要求用户进行确认。 相反,如果 cmdlet 即将更改Windows PowerShell变量,则 cmdlet 不需要确认。

若要发出确认请求,cmdlet 必须指示它支持确认请求,并且必须调用 System.Management.Automation.Cmdlet.ShouldProcessSystem.Management.Automation.Cmdlet.ShouldContinue (可选) 方法来显示确认请求消息。

支持确认请求

若要支持确认请求,cmdlet 必须将 SupportsShouldProcess Cmdlet 属性的 参数设置为 true 。 这将启用 ConfirmWhatIf Windows PowerShell 提供的 和 cmdlet Windows PowerShell。 Confirm参数允许用户控制是否显示确认请求。 WhatIf参数允许用户确定 cmdlet 是应显示消息还是执行其操作。 不要手动将 和 Confirm WhatIf 参数添加到 cmdlet。

以下示例演示支持确认请求的 Cmdlet 属性声明。

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

调用 Confirmation 请求方法

在 cmdlet 代码中,先调用 System.Management.Automation.Cmdlet.ShouldProcess 方法,然后再执行更改系统的操作。 设计 cmdlet,以便如果调用返回值 ,则不执行该操作, false 并且 cmdlet 将处理下一个操作。

调用 ShouldContinue 方法

大多数 cmdlet 仅使用 System.Management.Automation.Cmdlet.ShouldProcess 方法请求确认。 但是,在某些情况下可能需要其他确认。 对于这些情况,请通过调用 System.Management.Automation.Cmdlet.ShouldContinue 方法来补充 System.Management.Automation.Cmdlet.ShouldProcess调用。 这使 cmdlet 或提供程序可以更精细地控制确认提示的所有响应 的" 是"范围。

如果 cmdlet 调用 System.Management.Automation.Cmdlet.ShouldContinue 方法,则 cmdlet 还必须提供 Force switch 参数。 如果用户指定用户何时调用 Force cmdlet,则 cmdlet 仍应调用 System.Management.Automation.Cmdlet.ShouldProcess,但它应绕过对 System.Management.Automation.Cmdlet.ShouldContinue的调用。

当 System.Management.Automation.Cmdlet.ShouldContinue 从无法提示用户的非交互式环境中调用时,它将引发异常。 添加参数可确保在非交互式环境中调用命令时仍可 Force 执行该命令。

以下示例演示如何调用 System.Management.Automation.Cmdlet.ShouldProcessSystem.Management.Automation.Cmdlet.ShouldContinue

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

System.Management.Automation.Cmdlet.ShouldProcess调用的行为可能因调用 cmdlet 的环境而异。 使用前面的准则有助于确保 cmdlet 与其他 cmdlet 的行为一致,而不考虑主机环境。

有关调用 System.Management.Automation.Cmdlet.ShouldProcess 方法的示例,请参阅 如何请求确认

指定影响级别

创建 cmdlet 时,请指定影响级别 (更改) 严重性级别。 为此,将 ConfirmImpact Cmdlet 属性的值设置为 High、Medium 或 Low。 只有在同时为 cmdlet 指定 参数时,才能 ConfirmImpact SupportsShouldProcess 为 指定值。

对于大多数 cmdlet,不需要显式指定 ConfirmImpact 。 请改为使用 参数的默认设置,即"中"。 如果设置为 ConfirmImpact "高",则默认情况下将确认该操作。 保留此设置以执行高中断性操作,例如重新格式化硬盘卷。

调用非确认方法

如果 cmdlet 或提供程序必须发送消息,但不能请求确认,它可以调用以下三种方法。 避免使用 System.Management.Automation.Cmdlet.WriteObject 方法发送这些类型的消息,因为 System.Management.Automation.Cmdlet.WriteObject 输出与 cmdlet 或提供程序的正常输出不一起,这会使脚本编写变得困难。

Cmdlet 和提供程序首先调用以下方法来请求确认,然后再尝试执行更改系统外部Windows PowerShell:

他们通过调用 System.Management.Automation.Cmdlet.Shouldprocess 方法来这样做,该方法会提示用户根据用户调用命令的方式确认操作。

另请参阅

编写 Windows PowerShell Cmdlet