Есть пару хороших ответы о проходящих функцияхPass Cmdlet в качестве параметра Функции
function pass_function([scriptblock] $func, [int] $a){
func.invoke($a)
}
Как бы вы пройти командлеты, которые принимают водопроводный ввод? У меня плохое решение
function pass_through([scriptblock]$command){
$command.invoke()
}
1,2,3,4 | pass_through { $input | Where { $_ -gt 1} }
выходы 2, 3, 4.
Технически Есть достаточное количество инструментов, но они требуют пустячный реализации. Я бы предпочел передать Where и {$ _ -gt 1} в качестве отдельных параметров.
Если у вас нет хорошей поддержки, то какой стиль этого языка для решения подобных проблем?
Вы можете уточнить, почему вы делаете это таким образом? Мета-программирование - это весело и все, но мне любопытно. Почему вы не можете сделать выделенную функцию, которая принимает эти параметры, которые вы хотите ... обрабатывать и продолжать с конвейером. – Matt
Пример был выбран для простоты. Но предположим, что у меня есть инструмент «logging», который проверяет влияние CmdLet на вход в канале.Таким образом, у нас может быть «input | remember | selectedCmdLet | difference» Где «запомнить» может каким-то образом пометить значения, а «разница» сигнализируется, когда элемент в потоке был удален или изменен. Было бы неплохо, если бы я мог просто вызвать Test selectedCmdLet вместо вызова между этими двумя командлетами. – Polymer
Функция @Polymer 'Test {param ([ScriptBlock] $ Command) input | запомнить | Invoke-Command $ Command | difference}' 'Test {Where {$ _ -gt 1}}' – PetSerAl