PowerShell 技能连载 - 在 PowerShell 函数中支持风险缓解

当一个 PowerShell 函数进行一个可能有风险的系统变更时,推荐使用 -WhatIf-Configm 风险缓解参数。以下是基本的需求:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function Test-WhatIf
{
[CmdletBinding(SupportsShouldProcess,ConfirmImpact='Low',HelpUri='http://www.myhelp.com')]
param()
if ($PSCmdlet.ShouldProcess($env:COMPUTERNAME,"Say 'Hello'"))
{
"I am executing..."
}
else
{
"I am simulating..."
}
}

当运行这个函数时,PowerShell 会遵从 -WhatIf-Confirm 参数设置:

1
2
3
4
5
6
7
8
PS C:\> Test-WhatIf -WhatIf
What if: Performing the operation "Say 'Hello'" on target "PC10".
I am simulating...
PS C:\> Test-WhatIf
I am executing...
PS C:\>

这个函数还定义了一个 ConfirmImpact 属性,它的值可以是 LowMediumHigh,表示这个函数的操作引起的改变有多严重。

ConfirmImpact 的值大于或等于 $ConfirmPreference 变量中定义的值时,PowerShell 自动向用户显示一个确认信息:

1
2
3
4
5
6
7
8
9
10
PS C:\> $ConfirmPreference = "Low"
PS C:\> Test-WhatIf
I am executing...
Confirmation
Do you really want to perform this action?
...
I am simulating...

本文国际来源:Supporting Risk Mitigation in PowerShell Functions

评论