#powershell
#powershell
Вопрос:
Я хочу создать функцию foo
, для которой требуется добавить хотя бы одну строку. Можно добавить больше (неуказанное количество), но это не обязательно.
Я создал функцию, похожую на эту:
function foo {
[CmdLetBinding()]
param(
[Parameter(Mandatory=$true)][string]$param1
)
if ($args -ne $null) {
$string = $param1 " " $($args -join ' ')
} else {
$string = $param1
}
Write-Output $string
}
Однако выполнение foo a b c
(ожидаемый результат a b c
) завершается неудачей с
foo : A positional parameter cannot be found that accepts argument 'b'.
At line:1 char:1
foo a b c
Что мне нужно изменить, чтобы этот код заработал?
Комментарии:
1. Вы ожидаете, что powershell объединит / конкатенирует отдельные аргументы в одну строку, или вы заинтересованы в использовании их в виде массива строк внутри функций?
Ответ №1:
Чтобы неявно привязать разрозненные аргументы к именованному параметру, вам нужно установить ValueFromRemainingArguments
флаг в [Parameter()]
атрибуте целевого параметра:
param(
[Parameter(Mandatory=$true, ValueFromRemainingArguments=$true)][string]$param1
)
PS C:> foo a b c
a b c
Комментарии:
1. Спасибо за быстрый ответ. Это решило мою проблему. Вся слава вам, добрый сэр! 😉
2. learn.microsoft.com/en-us/powershell/module /… для получения обширного списка.
3. @ITM Я также обновил ответ ссылкой на
about_Functions_Advannced_Parameters
документ 🙂