我应该对函数/脚本调用的所有参数使用冒号吗?

时间:2014-10-31 12:36:06

标签: powershell parameter-passing

我最近开始使用PowerShell,并注意到我可以使用参数名称和值之间的空格或使用冒号来传递参数值,如下所示:

MyFunction -Parameter value
or
MyFunction -Parameter:value

我开始使用冒号,因为它更多地区分了线(出于可读性的原因),但从我所见,大多数人都没有使用它。

我还读了一下differences between these approaches when working with switch typed arguments,它通常不需要值。在那种情况下,需要使用冒号,否则命令将不起作用。这是我为什么倾向于为每个参数使用冒号的另一个原因,出于一致性原因。

还有什么我应该记住的吗?

2 个答案:

答案 0 :(得分:4)

一般来说,当我需要执行一个switch参数设置为false的函数时,我只是省略了开关。这是switch参数的设计意图。我认为在参数中使用冒号的唯一一次是我需要以编程方式确定开关的值。

例如,假设我需要在偶数天获得常规目录列表,并在奇数天获得递归目录列表:

Get-ChildItem -Path $Path -Recurse:$((Get-Date).Day % 2 -eq 1) | ForEach-Object {...}

除此之外,我个人不会打扰冒号,除非它显着增加了给定语句的可读性。它不是常用的语法,因此以后阅读代码的人更容易被它混淆。

答案 1 :(得分:2)

一般情况下,我会离开结肠。仅在设置切换参数的情况下使用它(通常在您想要将变量传递给它时,例如-Verbose:$someVariable

基本上,我认为你应该与更容易接受的风格保持一致,这就是我所描述的。

如果你真的想以内部一致的方式设置所有参数,允许变量用于开关参数,并且是一种可接受的(虽然鲜为人知)传递参数的方式,请考虑 splatting ,如下所示:

$params = @{
    'Param1' = $value1
    'Param2' = 5
    'WhatIf' = $true
}

Some-Cmdlet @params