Есть ли простой способ передать определенные *именованные* параметры PowerShell непосредственно в вызываемую функцию?

Я уверен, что где-то читал, что есть простой способ передать именованные параметры из вызывающей функции в вызываемую функцию без явного именования и указания каждого параметра.

Это больше, чем просто повторное использование позиции; Меня интересует случай, когда имя передаваемых параметров в одних случаях совпадает, а в других нет.

Я также думаю, что есть способ, который не зависит от положения.

function called-func {
    param([string]$foo, [string]$baz, [string]$bar)
    write-debug $baz
    write-host $foo,$bar
}

function calling-func {
    param([int]$rep = 1, [string]$foo, [string]$bar)
    1..$rep | %{
        called-func -foo $foo -bar $bar -baz $rep ## <---- Should this be simpler?
    }
}

calling-func -rep 10 -foo "Hello" -bar "World"

Какой метод и есть ли ссылка?

Я думал, что это мог быть Джеффри Сновер, но я не уверен.


person John Weldon    schedule 05.08.2009    source источник
comment
Сначала я несколько погуглил, но, поскольку я не видел ответа уже здесь, на SO, я все равно хотел получить его здесь.   -  person John Weldon    schedule 05.08.2009
comment
Итак, после некоторого поиска в Google, я думаю, что функция, о которой я думал, связана с «разбрызгиванием» и передачей параметров переключателя. Я опубликую ответ после того, как узнаю все подробности.   -  person John Weldon    schedule 05.08.2009


Ответы (3)


В PowerShell v2 (на который, по общему признанию, вы, возможно, еще не готовы перейти) вы можете передавать параметры, не зная о них заранее:

called-func $PSBoundParameters

PSBoundParameters — это словарь всех параметров, которые фактически были предоставлены вашей функции. Вы можете удалить параметры, которые вам не нужны (или, я полагаю, добавить).

person JasonMArcher    schedule 07.08.2009
comment
Да, я не могу дождаться, когда v2 пойдет в производство :) - person John Weldon; 08.08.2009

Ну, я думаю, что перепутал запись в блоге Я читал о параметрах переключения. Насколько я могу судить, лучший способ - просто повторно использовать параметры следующим образом:

called-func -foo:$foo -bar:$bar
person John Weldon    schedule 05.08.2009
comment
Синтаксис двоеточия требуется, когда foo является параметром-переключателем. Если вы передадите -foo $foo, то called-func будет думать, что получает два аргумента (переключатель foo и значение $foo). - person M. Dudley; 28.12.2011

Как насчет

called-func  $foo $bar
person Scott Weinstein    schedule 05.08.2009