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"):

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

4

1 回答 1

2

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

逻辑有点奇怪。

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

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

不存在的项目上的新项目具有 Med(2) 的确认,2 < High(3),因此没有提示。

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

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

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

于 2013-08-15T18:13:27.250 回答