Cmdlet 应在它们即将更改 Windows PowerShell 环境之外的系统时请求确认。 例如,如果 cmdlet 即将添加用户帐户或停止进程,则 cmdlet 应在继续作之前要求用户进行确认。 相比之下,如果 cmdlet 即将更改 Windows PowerShell 变量,则 cmdlet 不需要确认。
为了发出确认请求,cmdlet 必须指示它支持确认请求,并且必须调用 System.Management.Automation.Cmdlet.ShouldProcess,并 System.Management.Automation.Cmdlet.ShouldContinue(可选)方法来显示确认请求消息。
支持确认请求
若要支持确认请求,cmdlet 必须将 Cmdlet 属性的 SupportsShouldProcess
参数设置为 true
。 这将启用 Windows PowerShell 提供的 Confirm
和 WhatIf
cmdlet 参数。
Confirm
参数允许用户控制是否显示确认请求。
WhatIf
参数允许用户确定 cmdlet 是应显示消息还是执行其作。 请勿手动将 Confirm
和 WhatIf
参数添加到 cmdlet。
以下示例演示支持确认请求的 Cmdlet 属性声明。
[Cmdlet(VerbsDiagnostic.Test, "RequestConfirmationTemplate1",
SupportsShouldProcess = true)]
调用确认请求方法
在 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
开关参数。 如果用户在调用 cmdlet 时指定 Force
,cmdlet 仍应调用 System.Management.Automation.Cmdlet.ShouldProcess,但它应绕过调用 System.Management.Automation.Cmdlet.ShouldContinue。
System.Management.Automation.Cmdlet.ShouldContinue 会在从无法提示用户的非交互式环境中调用它时引发异常。 添加 Force
参数可确保在非交互式环境中调用命令时仍可以执行该命令。
以下示例演示如何调用 System.Management.Automation.Cmdlet.ShouldProcess 和 System.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 时,请指定更改的影响级别(严重性)。 为此,请将 Cmdlet 属性的 ConfirmImpact
参数的值设置为“高”、“中”或“低”。 仅当同时为 cmdlet 指定 SupportsShouldProcess
参数时,才能为 ConfirmImpact
指定值。
对于大多数 cmdlet,无需显式指定 ConfirmImpact
。 请改用参数的默认设置,即中等。 如果将 ConfirmImpact
设置为“高”,则默认情况下将确认该作。 为高度中断的作(例如重新格式化硬盘卷)保留此设置。
调用非确认方法
如果 cmdlet 或提供程序必须发送消息,但不能请求确认,则可以调用以下三种方法。 避免使用 System.Management.Automation.Cmdlet.WriteObject 方法发送这些类型的消息,因为 System.Management.Automation.Cmdlet.WriteObject 输出与 cmdlet 或提供程序的正常输出相交,这使得脚本编写变得困难。
若要提醒用户并继续作,cmdlet 或提供程序可以调用 System.Management.Automation.Cmdlet.WriteWarning 方法。
若要提供用户可以使用
Verbose
参数检索的其他信息,cmdlet 或提供程序可以调用 System.Management.Automation.Cmdlet.WriteVerbose 方法。若要为其他开发人员或产品支持提供调试级别详细信息,cmdlet 或提供程序可以调用 System.Management.Automation.Cmdlet.WriteDebug 方法。 用户可以使用
Debug
参数检索此信息。
Cmdlet 和提供程序首先调用以下方法来请求确认,然后再尝试执行在 Windows PowerShell 外部更改系统的作:
它们通过调用 System.Management.Automation.Cmdlet.ShouldProcess 方法执行此作,该方法会提示用户根据用户调用命令的方式确认作。