PowerShellでは、コマンドレットとスクリプト化された関数にパイプできます。しかし、オブジェクト、プロパティ、またはメンバー関数にパイプすることは可能ですか?
たとえば、データベース接続オブジェクトがある場合$dbCon
、次のようなことができるようにしたいと思います。
$dbCon.GetSomeRecords() | <code-to-manipulate-those-records | $dbCon.WriteBackRecords()
オブジェクトを引数として取得するコマンドレットを使用して、または使用して同じ機能を実現できることを知ってForeach-Object
います-オブジェクトまたはそのメンバーに直接パイプしたい理由は、エレガンスを実現し、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.
(()を追加しても効果はありません)。私が探しているのは、そのコマンドをグローバル関数と同じように機能させる方法です。