Как указать непозиционный параметр в сценарии PowerShell?

У меня есть следующее param блок в начале сценария

param(
 [string]$command,
 [string]$version = "1.1.0"
)

Это прекрасно, только мне нужно $version не быть позиционным параметром, так, чтобы, если Вы вводите

.\script.ps1 run argument

Затем $args должен содержать "аргумент" и $version должен быть "1.1.0". Я знаю, что могу сделать это с C# Cmdlet, но было бы более удобно, если я мог бы поставить это как единственный сценарий.

8
задан Anthony Mastrean 26 June 2012 в 03:23
поделиться

1 ответ

В PowerShell 1.0 это невозможно, AFAIK. Вам нужно будет удалить параметр $ version, если вы не хотите, чтобы он был позиционным.

В PowerShell 2.0 вы можете получить то, что хотите, создав расширенную функцию, в которой вы указываете дополнительную информацию в атрибуте Parameter, например:

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
6
ответ дан 5 December 2019 в 22:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: