Powershell Cmdlet.ShouldProcess 方法默认答案
Powershell Cmdlet.ShouldProcess Method default answer
我有一个 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。我写了一个非常繁琐的脚本,我最不想看到的是脚本用户只需按回车键,而无需验证他们将其应用于什么。
我已经阅读了其中的 documentation,但没有任何地方提到这一点。
不,不幸的是没有
根据 ShouldProcess()
的当前实施,default option is always the first choice
是否ShouldProcess()
提示用户确认操作取决于$ConfirmPreference
自动变量的值是否高于被调用的cmdlet的ConfirmImpact
属性。
$ConfirmPreference
默认为 High
,可用的最高严重性影响级别。
要始终取消 ShouldProcess()
的确认提示,请将 $ConfirmPreference
设置为 None
:
# 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
经过进一步研究,我找到了一种方法来做到这一点。为了将默认响应设置为 NO,应该使用 ShouldContinue 方法而不是 ShouldProcess。
阅读 documentation 的 ShouldContinue 有一个格式为
的部分
ShouldContinue(String, String, Boolean, Boolean, Boolean)
第一个布尔值是引用安全影响。如果确认的操作具有安全影响,则为真。如果指定,则在选择菜单中选择的默认选项为 'No'.
我有一个 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。我写了一个非常繁琐的脚本,我最不想看到的是脚本用户只需按回车键,而无需验证他们将其应用于什么。
我已经阅读了其中的 documentation,但没有任何地方提到这一点。
不,不幸的是没有
根据 ShouldProcess()
的当前实施,default option is always the first choice
是否ShouldProcess()
提示用户确认操作取决于$ConfirmPreference
自动变量的值是否高于被调用的cmdlet的ConfirmImpact
属性。
$ConfirmPreference
默认为 High
,可用的最高严重性影响级别。
要始终取消 ShouldProcess()
的确认提示,请将 $ConfirmPreference
设置为 None
:
# 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
经过进一步研究,我找到了一种方法来做到这一点。为了将默认响应设置为 NO,应该使用 ShouldContinue 方法而不是 ShouldProcess。
阅读 documentation 的 ShouldContinue 有一个格式为
的部分ShouldContinue(String, String, Boolean, Boolean, Boolean)
第一个布尔值是引用安全影响。如果确认的操作具有安全影响,则为真。如果指定,则在选择菜单中选择的默认选项为 'No'.