У меня есть следующее param
блок в начале сценария
param(
[string]$command,
[string]$version = "1.1.0"
)
Это прекрасно, только мне нужно $version
не быть позиционным параметром, так, чтобы, если Вы вводите
.\script.ps1 run argument
Затем $args
должен содержать "аргумент" и $version
должен быть "1.1.0". Я знаю, что могу сделать это с C# Cmdlet, но было бы более удобно, если я мог бы поставить это как единственный сценарий.
В 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