私はpowershellの動的機能をいじっていましたが、何か疑問に思っていました
オブジェクトの存在しないメソッドへの呼び出しを動的に処理するために「すべてのメソッドをキャッチ」を設定できる、Ruby の method_missing() に類似したものは powershell にありますか?
私はpowershellの動的機能をいじっていましたが、何か疑問に思っていました
オブジェクトの存在しないメソッドへの呼び出しを動的に処理するために「すべてのメソッドをキャッチ」を設定できる、Ruby の method_missing() に類似したものは powershell にありますか?
いいえ、そうではありません。PowerShellの次のバージョンは、.NET 4に追加された動的ディスパッチ機能とより一致するようになると思いますが、当面の間、これは純粋なPowerShellでは不可能です。
.NETのTypeDescriptorにあるものと同様のコンポーネントモデルがあり、PowerShellに動的にプロパティとメソッドを提供するオブジェクトを作成していることを思い出します。これは、たとえばXML要素をオブジェクトのように扱う方法です。しかし、私の経験では、統合するために必要な多くのタイプ/メソッドが内部としてマークされている場合、これは十分に文書化されていません。
エミュレートすることはできますが、難しいです。この手法は Lee Holmes の本で説明されており、Add-RelativePathCapture http://poshcode.org/2131と New-CommandWrapper http://poshcode.org/2197の 2 つのスクリプトに要約されます。
本質は、New-CommandWrapper を介して任意のコマンドレットをオーバーライドできることです。したがって、ほとんどすべてのコマンドの最後に暗黙的に呼び出される Out-Default を再定義できます (最後に Format-Table のような明示的なフォーマッターがあるコマンドを除く)。新しい Out-Default では、最後のコマンドがメソッド/プロパティが見つからないという例外をスローしたかどうかを確認します。そこに method_missing ロジックを挿入します。
Powershell2.0内でTryCatchを使用できます
http://blogs.technet.com/b/heyscriptingguy/archive/2010/03/11/hey-scripting-guy-march-11-2010.aspx