【问题标题】:How to define a parameter with optional value?如何定义具有可选值的参数?
【发布时间】:2019-03-27 12:54:09
【问题描述】:

我正在尝试创建一个函数,其参数 (Para2) 为字符串类型,并分配了值 ("ABC")。当仅调用参数时,应使用该值。如果参数带有值,则应使用该值。 但我不知道该怎么做。我卡住了,需要你的帮助。

我使用了 AllowEmptyString 和不同的 ValidationSets,但没有成功。这是我目前所拥有的:

Function MyFunction {

    [CmdletBinding (
        PositionalBinding = $false,
        DefaultParameterSetName = "MySet1"
    )]

    Param (

        [Parameter(ParameterSetName = "MySet1")]
        [string]$Para1 = "Para1 default",

        [Parameter(ParameterSetName = "MySet1")]
        [string]$Para2 = "ABC"

    )

    Write-Output $Para2

}

MyFunction -Para2 "xxx"

调用像 'MyFunction -Para2 "xxx"' 这样的函数会返回 "xxx" - 这是意料之中的。 我喜欢找到一种方法来调用像“MyFunction -Para2”这样的函数,并希望看到“ABC”作为返回值。

有什么想法吗?

【问题讨论】:

  • 不带任何参数直接调用..
  • 通过将“-Para2”添加到您的调用中,您就是在告诉 PowerShell 您将提供该值。不带参数调用它以使用默认值(“Para1 default”和“ABC”)

标签: string powershell parameters return-value


【解决方案1】:

你可以按照 TheIncorrigle1 所说的去做,但如果输入变量可能为空,你也可以使用以下内容:

function MyFunction{
    [CmdletBinding(
        PositionalBinding = $false,
        DefaultParameterSetName = "MySet1"  
    )]
    param(
        [Parameter(ParameterSetName = "MySet1")]
        [string]$Para1 = "Para1 default",

        [Parameter(ParameterSetName = "MySet1")]
        [string]$Para2 = $para2
    )
    if(!$Para2){
        Write-Output "ABC"
    }else{
        Write-Output $Para2
    }
}

MyFunction -Para2 ""

这样,如果在 -Para2 之后放置一些内容,它将作为输出,如果输入为空或 $null,则输出“ABC”。

我还稍微格式化了脚本以使其更具可读性。一点建议是 PowerShell 脚本指南,以始终确保您的脚本可读和可维护。

希望这会有所帮助!

评论中您的问题的可能解决方案:

try{
    MyFunction -Para2
}catch{
    MyFunction -Para2 ""
}

【讨论】:

  • 嗯,好的,我明白了。非常感谢。这可能是一种解决方法。但最大的目标是使用 -Para2 而不使用“”。有机会达到这个吗?有没有机会在没有输入的情况下用“”自动扩展 Para2?
  • @Schiroky 这里的目的是什么?你想达到什么目的?
  • 我不知道你为什么想要这个,但我在上面的回答中添加了一个可能的解决方案
  • 正如 Mathias 所要求的,准确解释您想要实现的目标以及原因会非常有帮助。
  • 计划是用参数调用函数,当参数没有值时,使用默认值。如果参数带有值,请使用该值。这就是计划。我确实读到这可能是不可能的。我会去找解决方法。谢谢你们。
猜你喜欢
  • 2015-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-30
  • 1970-01-01
  • 1970-01-01
  • 2012-05-05
  • 1970-01-01
相关资源
最近更新 更多