5

我有一个 powershell 脚本,我在其中实现了具有高 ConfirmImpact 的 should process 方法,以确保出现提示。

提示按预期工作,但未输入任何内容时的默认响应为“Y”

[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "Y"):

有没有办法将默认响应更改为“N”?如果用户想要应用脚本,我希望用户必须明确输入 Y。我已经编写了一个相当繁重的脚本,我想要的最后一件事是让脚本用户直接按 Enter 键而不验证他们将其应用于什么。

我已经阅读了有关它的文档,并且在任何地方都没有提到这一点。

4

2 回答 2

3

经过进一步的研究,我找到了一种方法来做到这一点。为了将默认响应设置为 NO,应该使用 ShouldContinue 方法而不是 ShouldProcess。

阅读 ShouldContinue 的文档有一个部分的格式

ShouldContinue(String, String, Boolean, Boolean, Boolean)

第一个布尔值是引用安全影响。如果正在确认的操作具有安全影响,则为真。如果指定,则在选择菜单中选择的默认选项为“否”。

于 2019-02-20T17:18:48.213 回答
0

不,很遗憾没有

在 的当前实现中ShouldProcess()默认选项始终是首选


是否ShouldProcess()提示用户确认操作取决于$ConfirmPreference自动变量的值是否高于ConfirmImpact被调用的 cmdlet 的属性。

$ConfirmPreference默认为High,可用的最高严重性影响级别。

要始终使 的确认提示无效ShouldProcess(),请设置$ConfirmPreferenceNone

# Define a function with ConfirmImpact Medium or higher
function f {
  [CmdletBinding(SupportsShouldProcess=$true,ConfirmImpact='Medium')]
  param()

  if($PSCmdlet.ShouldProcess("Dangerous operation")) {
    Write-Host 'Welcome to the Danger Zone' -ForegroundColor Red
  }
}

# Set $ConfirmPreference to `Medium` to prompt for confirmation
$ConfirmPreference = 'Medium'

# Call our function - you'll be prompted for confirmation
f

# Set $ConfirmPreference to `None` to suppress confirmation prompts
$ConfirmPreference = 'None'

# Call our function - you won't be prompted for confirmation
f
于 2019-02-20T15:50:02.777 回答