Передача параметров в явном виде
Параметры -WhatIf
и -Confirm
можно передавать с помощью переменных $WhatIfPreference
и $ConfirmPreference
.В следующем примере это достигается с помощью параметра splatting :
if($ConfirmPreference -eq 'Low') {$conf = @{Confirm = $true}}
StopService MyService -WhatIf:([bool]$WhatIfPreference.IsPresent) @conf
$WhatIfPreference.IsPresent
будет True
, если в содержащей функции используется переключатель -WhatIf
.При использовании переключателя -Confirm
на содержащей функции временно устанавливается $ConfirmPreference
на low
.
Неявно передаются параметры
Поскольку -Confirm
и -WhatIf
Временно установите переменные $ConfirmPreference
и $WhatIfPreference
автоматически, нужно ли даже передавать их?
Рассмотрим пример:
function ShouldTestCallee {
[cmdletBinding(SupportsShouldProcess=$true,ConfirmImpact='Medium')]
param($test)
$PSCmdlet.ShouldProcess($env:COMPUTERNAME,"Confirm?")
}
function ShouldTestCaller {
[cmdletBinding(SupportsShouldProcess=$true)]
param($test)
ShouldTestCallee
}
$ConfirmPreference = 'High'
ShouldTestCaller
ShouldTestCaller -Confirm
ShouldTestCaller
приводит к True
from ShouldProcess()
ShouldTestCaller -Confirm
выдает запрос на подтверждение, хотя я не прошел переключатель.
Редактировать
@ manojlds ответ заставил меня понять, что мое решение всегда устанавливало $ConfirmPreference
на «Низкий» или «Высокий».Я обновил свой код, чтобы установить переключатель -Confirm
только в том случае, если для подтверждения выбрано «Низкий».