如何使Powershell在未声明的命令行参数上发出错误

时间:2019-02-20 01:05:24

标签: powershell

给出以下script.ps1

Param([switch]$Foo)

Write-Output $Foo

如何使未声明的参数(例如script.ps1 -Bar)出错?

我可以通过解释$args来编写自己的代码,但是看起来powershell应该可以为我完成代码,因为它已经解析了参数。

1 个答案:

答案 0 :(得分:2)

为了只接受声明的参数和意外的额外参数上的错误,必须将脚本/函数设置为高级一个,这可以通过以下方式实现:< / p>

  • 明确地:使用param(...)属性装饰[CmdletBinding(...)]块。

  • 隐式:使用[Parameter(...)]属性修饰任何单个参数。

例如(为简单起见,使用 script块{ ... }); 脚本功能也是如此):

PS> & { Param([switch] $Foo)  } -Bar
# !! NO error (or output) - undeclared -Bar switch is quietly IGNORED.

# Using the [CmdletBinding()] attribute ensures that only declared
# parameters can be used.
PS> & { [CmdletBinding()] Param([switch] $Foo)  } -Bar
A parameter cannot be found that matches parameter name 'Bar'. # OK - error.
...

请参见Get-Help about_Functions_Advanced