使用SWITCH参数进行递归调用的最佳方法是什么?

时间:2015-11-11 22:35:21

标签: powershell switch-parameter

在下面的例子中,我有一个IF语句来确定在递归调用时哪些参数发送到Demo。如果$y是布尔值而不是开关,我可以简单地调用Demo -x $x -y $y;但作为一个不可行的选择。

function Demo {
    [CmdletBinding()]
    param (
        [int]$x
        ,[switch]$y
    )
    process {
        $x--
        if ($x -gt 0) {
            "$x - $($y.IsPresent)"
            if($y.IsPresent) {
                Demo -x $x -y
            } else {
                Demo -x $x
            }
        }
    }
}
Demo 10 -y
Demo 10

问题

以上是处理这种情况的正确方法,还是存在更清晰的选项?

1 个答案:

答案 0 :(得分:4)

您可以通过这样调用来强制切换参数:-Switch:$true(在大多数情况下显然是多余的)或-Switch:$false所以对于您的示例:

Demo -y:$y

顺便说一下,在这个例子中,你也可以使用splatting:

Demo @PSBoundParameters

但你的帖子显然是MVCE,所以这可能不适用于你实际做的事情,或者可能需要修改,尤其是if you have default values for some parameters(完全披露:我的博客)。