请求 Cmdlet 确认
Cmdlet 应在即将更改外部环境的系统时请求Windows PowerShell确认。 例如,如果 cmdlet 即将添加用户帐户或停止进程,则 cmdlet 应在继续操作之前要求用户进行确认。 相反,如果 cmdlet 即将更改Windows PowerShell变量,则 cmdlet 不需要确认。
若要发出确认请求,cmdlet 必须指示它支持确认请求,并且必须调用 System.Management.Automation.Cmdlet.ShouldProcess 和 System.Management.Automation.Cmdlet.ShouldContinue (可选) 方法来显示确认请求消息。
支持确认请求
若要支持确认请求,cmdlet 必须将 SupportsShouldProcess
Cmdlet 属性的 参数设置为 true
。 这将启用 Confirm
由 WhatIf
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.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 时,请指定影响级别 (更改) 严重性级别。 为此,将 ConfirmImpact
Cmdlet 属性的值设置为 High、Medium 或 Low。 只有在同时为 cmdlet 指定 参数时,才能 ConfirmImpact
SupportsShouldProcess
为 指定值。
对于大多数 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 方法来这样做,该方法会提示用户根据用户调用命令的方式确认操作。
另请参阅
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈