有很多问题涉及到解决PowerShell没有将whatif
传播到子函数这一事实。 comment on this answer甚至提到了记录的Connect问题,但问题似乎已经消失。
PowerShell 5中肯定不再存在这个问题,因为这个例子输出了#34; Skipped!"正如你所期望的那样:
function Outer
{
[CmdletBinding(SupportsShouldProcess=$true)]
param()
Inner
}
function Inner
{
[CmdletBinding(SupportsShouldProcess=$true)]
param()
if ($PSCmdlet.ShouldProcess("Inner"))
{
Write-Host "Process!"
}
else
{
Write-Host "Skipped!"
}
}
Outer -WhatIf
然而,当修复时,它并不清楚。我无法找到超过5的更改日志,但没有提及此问题。有谁知道哪个版本的PowerShell修复了这个问题?
(这个问题似乎无关紧要,但它可以帮助脚本/模块作者选择适当的最低PS版本来运行)
答案 0 :(得分:1)
@PetSerAl和@LachieWhite的注释表明,自PowerShell 2.0起,该问题似乎已修复。
不幸的是,该版本Windows Management Framework的发行说明的下载链接为no longer working。它似乎在Scribd上,但是我没有帐户。 (有人吗?)
除非您确定要生产的版本较低,否则我认为可以安全地按预期工作。