有许多问题与解决PowerShell没有传播whatif到子函数这一事实有关.对此答案的评论甚至提到了记录的Connect问题,但问题似乎已经消失.
PowerShell 5中肯定不再存在该问题,因为此示例输出"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
Run Code Online (Sandbox Code Playgroud)
但是,目前尚不清楚何时修复此问题.我找不到超过5的更改日志,但没有提到问题.有谁知道哪个版本的PowerShell修复了这个问题?
(这个问题似乎无关紧要,但它可以帮助脚本/模块作者选择适当的最小PS版本来运行)
正如 @PetSerAl 和 @LachieWhite 的评论所示,自 PowerShell 2.0 以来,它似乎已得到修复。
遗憾的是,该版本Windows Management Framework发行说明的下载链接已不再有效。好像在Scribd上,但我没有帐户。(任何人?)
除非您确定生产中使用的是较低版本,否则我认为可以安全地假设该开关将按预期工作。
| 归档时间: |
|
| 查看次数: |
273 次 |
| 最近记录: |