当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 请求 Cmdlet 确认

作者:精品下载站 日期:2024-12-14 02:50:12 浏览:13 分类:玩电脑

请求 Cmdlet 确认


当 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 提供的 ConfirmWhatIf cmdlet 参数。 Confirm 参数允许用户控制是否显示确认请求。 WhatIf 参数允许用户确定 cmdlet 是否应显示消息或执行其操作。请勿手动将 ConfirmWhatIf 参数添加到 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 参数的值设置为 High、Medium 或 Low。仅当您同时为 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 外部系统的操作之前,首先调用以下方法来请求确认:

  • 系统.管理.自动化.Cmdlet.Shouldprocess

  • System.Management.Automation.Provider.Cmdletprovider.Shouldprocess

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

参见

编写 Windows PowerShell Cmdlet

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯