为什么ConfirmImpact不在这里工作?

时间:2013-08-14 16:40:13

标签: powershell powershell-v3.0

我创建了Test-ConfirmImpact.ps1:

[CmdletBinding(SupportsShouldProcess=$true, ConfirmImpact="High")]
Param (
    $Test = 1
)

New-Item -ItemType Directory -Path ".\Test"

请注意以下事项:

PS > $ConfirmPreference
High
PS > .\Test-ConfirmImpact.ps1


Directory: \\afgfile02\users\radams\scripts\PowerShell


Mode                LastWriteTime     Length Name
----                -------------     ------ ----
d----         8/14/2013  12:34 PM            Test


PS > $ConfirmPreference = "Medium"
PS > Remove-Item ".\Test"

Confirm
Are you sure you want to perform this action?
Performing operation "Remove Directory" on Target ".\Test".
[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "Y"): y
PS > .\Test-ConfirmImpact.ps1

Confirm
Are you sure you want to perform this action?
Performing operation "Create directory" on Target "Destination: \.Test".
[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "Y"):

那么,为什么我在第一种情况下没有收到确认提示?我希望如果我的确认偏好是“高”,那么影响“高”的事件应该触发确认。

1 个答案:

答案 0 :(得分:2)

[CmdletBinding(ConfirmImpact="High")仅告诉您的脚本使用ShouldProcess方法时要使用的行为。它不设置ConfirmPreference。

逻辑有点奇怪。

  

只有当ConfirmImpact参数等于或大于$ ConfirmPreference首选项变量的值时,对ShouldProcess方法的调用才会显示确认提示。

ConfirmImpact是一个枚举,其中High = 3,Medium = 2,Low = 1,None = 0

对于不存在的项目的新项目具有确认Med(2),2<高(3),所以没有提示。

当你再次将它设置为中等时,2 -eq 2,它会提示。

Remove-Item的默认影响为High(3),因为它会导致数据丢失,3 -ge(任何确认首选项),因此它总是会提示。

有关如何处理ShouldProcess和ConfirmImpact的更多信息,请参阅http://iheartpowershell.blogspot.co.za/2013/05/powershell-supportsshouldprocess-worst.html