如果我在没有任何参数的情况下调用该函数,则默认值为
当我调用一个带有命名参数的函数并且我将其中一个留空时我得到一个错误...有什么方法可以解决这个问题吗?
这是函数
function foo {
Param(
[string]$a,
[string]$b = "bar",
[bool]$c = $false
)
Write-Host "a:", $a, "; b:", $b, "; c:", $c
}
foo "hello"
返回a: hello ; b: bar ; c: False
。
foo -a test -b test -c $true
返回a: test ; b: test ; c: True
。
foo -a test -b test -c
抛出错误:
foo:缺少参数' c'的参数。指定类型的参数 ' System.Boolean'然后再试一次。
答案 0 :(得分:1)
完全省略参数时,将分配参数的默认值。如果您提供参数但省略了值$null
已通过。
使用开关通常更好,而不是使用布尔参数:
function foo {
Param(
[string]$a,
[string]$b = "bar",
[Switch][bool]$c
)
Write-Host "a: $a`nb: $b`nc: $c"
}
当省略时,开关的值会自动$false
,当存在时会自动$true
。
PS C:\> foo -a test -b test -c a: test b: test c: True PS C:\> foo -a test -b test a: test b: test c: False
您还可以显式传递如下值:
PS C:\> foo -a test -b test -c:$true a: test b: test c: True PS C:\> foo -a test -b test -c:$false a: test b: test c: False
答案 1 :(得分:0)
您使用[bool]作为$ c的类型。如果您这样做,PowerShell需要通过调用:
来获取值foo -a test -b test -c
这是因为你告诉PowerShell:不要使用声明的默认值,我想覆盖默认值,但你不知道PowerShell应该使用哪个值而不是默认值。
我认为你要找的是你的功能的[开关]。 尝试:
function foo {
param([string] $a, [string]$b = "bar", [switch] $c)
Write-Host "a:", $a, "; b:", $b, "; c:", $c
}
foo "hello" -c
结果将是:
a: hello ; b: bar ; c: True
如果不使用-c开关,则$ c将为$ false。
可在此处找到更多信息:https://msdn.microsoft.com/en-us/library/dd878252(v=vs.85).aspx - >切换参数