错误没有将值传递给具有默认值的字符串参数

时间:2017-01-06 22:33:00

标签: powershell

我正在从命令行工作。假设我的示例如下所示:

Param(
  [Parameter()] [string]$greeting="HelloWorld"
)

从命令行我可以这样做:mygreeting
它将输出HelloWorld

或者我可以这样做:mygreeting -greeting="whatever"
它将输出whatever

为什么我不能输入这个?:

mygreeting -greeting

没有得到参数丢失的错误?

在代码中,我希望能够基本上说:
如果指定了问候但没有值,则根据其他事项有条件地设置值 如果未指定问候语,请使用默认值

2 个答案:

答案 0 :(得分:1)

这是设计使然。在PowerShell中,您通过传递参数,指定参数的名称,后跟您要传递的值(除非它是一个开关)或者您使用仅传递值的位置参数。)

答案 1 :(得分:1)

你可以用这个:

function test-test {
    [CmdletBinding()] 
    Param (
    [parameter(Position = 0)]
    [string]$greetings = "hi world"
    )

    $greetings
}

设置有关参数的值 你可以这样称呼它:

test-test "something"

test-test -greetings "something"

但你不能像parameter="value"

那样运行它

如果你想使用它,你应该使用:

test-test ($greetings = "ssss")
像这样。 但实际上这个$greetings与函数中的变量不同,因为oscope比你的函数更重要。