В PowerShell вы можете передавать в командлеты и в скриптовые функции. Но можно ли передать в объекты, свойства или функции-члены?
Например, если у меня есть объект подключения к базе данных $dbCon
, я хочу иметь возможность примерно так:
$dbCon.GetSomeRecords() | <code-to-manipulate-those-records | $dbCon.WriteBackRecords()
Я знаю, что та же функциональность может быть достигнута с помощью Foreach-Object
или с помощью командлета, который получает объект в качестве аргумента - причина, по которой я хочу передать по конвейеру непосредственно к объекту или его членам, заключается в достижении элегантности и сохранении ООП стиль (использование метода объекта вместо отправки объекта в качестве аргумента)
Возможно ли это?
EDIT:
Похоже, что люди не понимают мой вопрос, поэтому мне нужно уточнить его:
PowerShell может передавать обычные функции. Я могу написать:
function ScriptedFunction
{
$input|foreach{"Got "+$_}
}
1,2,3|ScriptedFunction
и получите
Got 1<br>
Got 2<br>
Got 3
В результате. Но когда я пытаюсь использовать эту технику с помощью скриптового метода:
$object=New-Object System.Object
$object|Add-Member -MemberType ScriptMethod -Name ScriptedMethod -Value {$input|foreach{"Got "+$_}}
1,2,3|$object.ScriptedMethod
Я получаю сообщение об ошибке: Expressions are only allowed as the first element of a pipeline.
(добавление () не помогает, кстати). Я ищу способ заставить эту команду работать так же, как она работает с глобальными функциями.