在 PowerShell 中,您可以通过管道进入 Cmdlet 和脚本函数。但是有可能通过管道传递到对象、属性或成员函数中吗?
例如,如果我有一个数据库连接对象$dbCon
,我希望能够这样:
$dbCon.GetSomeRecords() | <code-to-manipulate-those-records | $dbCon.WriteBackRecords()
我知道可以使用Foreach-Object
或使用获取对象作为参数的 Cmdlet 来实现相同的功能 - 我想直接通过管道传递到对象或其成员的原因是为了实现优雅并保持 OOP 风格(使用对象的方法而不是将对象作为参数发送)
可能吗?
编辑:
看起来人们不理解我的问题,所以我需要澄清一下:
PowerShell 可以通过管道传输到正常功能。我可以写:
function ScriptedFunction
{
$input|foreach{"Got "+$_}
}
1,2,3|ScriptedFunction
并得到
结果。但是当我尝试通过脚本方法使用该技术时:
Got 1
Got 2
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.
添加 () 对 BTW 没有帮助)。我正在寻找的是一种使该命令以与全局函数相同的方式工作的方法。