如何在PowerShell脚本中指定非位置参数?

8
我在脚本开头有以下param块:
param(
 [string]$command,
 [string]$version = "1.1.0"
)

这很好,只是我需要$version不是一个位置参数,这样如果您键入

.\script.ps1 run argument

那么$args应该包含“argument”,$version应该是“1.1.0”。我知道可以使用C# Cmdlet实现,但如果我能将其作为单个脚本交付会更方便。

1个回答

6
在PowerShell 1.0中,据我所知是不可能的。如果您不想让它成为位置参数,则需要删除$version参数。
在PowerShell 2.0中,您可以通过创建高级函数来获取所需内容,在其中使用参数属性指定其他信息,例如:
function foo {    
    param(
        [Parameter(Mandatory=$true, Position = 0)]
        [string]
        $command,

        [Parameter()]
        [string]
        $version = "1.1.0",

        [Parameter(ValueFromRemainingArguments = $true)]
        $remainingArgs
    )

    Process {
        $OFS = ','
        "command is $command"
        "version is $version"
        "remainingArgs are $remainingArgs"
    }
}

foo run argument

如果从第一个参数中删除“Position = 0”,则所有其余参数似乎都会恢复为位置参数。有什么想法可以创建一组参数,其中所有参数都是可选的吗? - Fopedush
如果您不设置 Mandatory=$true(或者完全删除 [Parameter()]),则参数被视为可选。 - Keith Hill
我好像无法创建没有位置参数的参数列表,真是遗憾。我稍后会详细提出这个问题。 - Fopedush
我已经在这里为我特定的角落案例问题打开了一个问题:https://dev59.com/22ct5IYBdhLWcg3wEJYm。 - Fopedush

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接