我创建了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"):
那么,为什么我在第一种情况下没有收到确认提示?我希望如果我的确认偏好是“高”,那么影响“高”的事件应该触发确认。
答案 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