Делает ли PowerShell какое-то ближайшее совпадение или автозаполнение при работе с аргументами, переданными скрипту? Учитывая этот код ...Соответствие скрипту Аргумент
[CmdletBinding()]
Param(
[string][Alias("aS")] $applySet,
[string][Alias("cS")] $conformSet,
[string][Alias("sL")] $setList,
[Parameter(ValueFromRemainingArguments = $true)][Object[]]$extraParameters = @()
)
Write-Host "s: $set"
Write-Host "sL: $setList"
Write-Host "aS: $applySet"
Write-Host "cS: $conformSet"
Write-Host "X: $extraParameters"
Если я использую -junk «вредную» в ярлыке сценария я получаю эту информацию в $extraParameters
, как ожидалось. Пропуская что-то, скажем -aplySet, также отображается как дополнительный параметр. Однако использование -set фактически заполняет переменную $setList
, а не $extraParameters
, как и следовало ожидать.
Проверено в PowerShell 2.0 и 5.1. Есть предположения?
Хм, я «угадать», что имеет смысл. По крайней мере, на языке сценариев. Желаю, чтобы его можно было отключить, как хотелось бы, что конвейерный выход может быть. По крайней мере, с аргументами командной строки. Но на данный момент я предполагаю, что мне нужно документировать поведение для людей и перестать пытаться поймать определенные ошибки, которые PS действительно не являются ошибками. – Gordon
Это полезное поведение в командной строке (быстрее набирать), но лучше всего использовать скрипт для написания всего. –
Точно. И я хочу поймать каждое «неуместное» использование. Но это, кажется, обходит это, поскольку я не могу правильно уловить -set как ошибку, потому что PowerShell автоматически принимает значение -setlist. И мы все знаем о том, чтобы предположить. ;) – Gordon