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 は設定されません。

ロジックは少し奇妙です。

ShouldProcess メソッドの呼び出しでは、ConfirmImpact 引数が $ConfirmPreference 設定変数の値以上の場合にのみ、確認プロンプトが表示されます。

ConfirmImpact は列挙型で、高 = 3、中 = 2、低 = 1、なし = 0 です。

存在しないアイテムの New-Item には、Med(2)、2 < High(3) の確認があるため、プロンプトは表示されません。

もう一度 Medium に設定すると、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 に答える