拡張メソッドをPowerShellに書き込むことはできますか?実行時に[string]のような既存の型の上に新しいメソッドを追加することができますか?PowerShell、拡張メソッド、Monkey Patching
答えて
拡張メソッドで型を修正する方法がわかりません。しかし、それは私がPowerShellを愛しているけれど、それは本当に不可解な構文を思い付くんアドオンMemberコマンドレットを経由して
PS> $a = "foo"
PS> $a = add-member -in $a -memberType ScriptMethod -name Bar -value { $this + "bar" } -passthru
PS> $a.Foo()
foobar
EDIT完全かつ完全に読めるPowerShellの構文を説明します:)
を対象にパッチを適用することは確かに可能です時々から。
- 「-in」:これははInputObjectの略で、基本的にこの
- 「-memberType」にメンバーを追加すると言う:あなたは方法、ノートのプロパティを含むランタイムオブジェクトに追加できる値の多くの異なる種類があります。 、コードメソッドなどを参照してください。完全なリストについては、「get-help add-member -full」を参照してください。
- 「-passthru」:メンバーを追加したばかりのオブジェクトを取り出し、パイプラインに押し下げます。このフラグがなければ、代入は
$a
にパイプラインを割り当てることになります。 - 割り当てコールは、基本的に
$a
は今、あなたはあなたが特定の型に追加するメソッドやプロパティを持っている場合は、PowerShellのの適応タイプを経由して、カスタムタイプの拡張機能を作成することができます
を追加する方法を持っていることを保証することですシステム。
カスタムタイプ拡張は、プロパティまたはスクリプトメソッドをタイプに記述し、Update-TypeDataコマンドレットを使用してPowerShellセッションにロードするXMLファイルです。
本の偉大な例では、あなたが少し構文について詳しく説明でしPowerShell Team Blog - Hate Add-Member? (PowerShell's Adaptive Type System to the Rescue)
はい、これは元のポスターが探している回答です。 – JasonMArcher
私はこの方法につきものになりました。わからない。私はPowerShellとXMLの両方でできるだけ多くのことをしたいと思います。うーん。もし私がたくさんの "モッズ"を持っていたら、私はこの方法を使うと思います。 – BuddyJoe
- 1. Python monkey patching
- 2. monkey patching vs class_eval?
- 3. Monkey patching ActiveResource :: Errors
- 4. gevent monkey-patching and breakpoints
- 5. monkey patchingオブジェクトが奇妙な結果を生成する
- 6. PowerShell 3のファイル拡張子
- 7. IsOrderedBy拡張メソッド
- 8. ジェネリック拡張メソッド
- 9. 拡張メソッド - デコレータパターン
- 10. MVC拡張メソッド
- 11. 拡張メソッドは
- 12. 拡張メソッド
- 13. 拡張メソッドは
- 14. LINQの拡張メソッド - GetYearWeekFormat拡張
- 15. コマンド拡張のpowershell拡張を無効にしますか?
- 16. Rubyメソッドの拡張
- 17. 仮想拡張メソッド?
- 18. 拡張メソッドのパートタイムバグ
- 19. NhQueryable LINQ拡張メソッド?
- 20. スタティックオブジェクトの拡張メソッド
- 21. Dの拡張メソッド?
- 22. 静的拡張メソッド
- 23. ユニットテストの拡張メソッド
- 24. LINQの拡張メソッド
- 25. バージョン間のPowerShellインストールフォルダとスクリプトファイル拡張子
- 26. フィールド拡張メソッドのポイント
- 27. 新しい拡張メソッド
- 28. 拡張メソッドと列挙
- 29. 拡張メソッドforward互換
- 30. HttpClientとReadAsAsync ()拡張メソッド
+1で見つけることができます。 $ a = add-memberは少し奇妙に見えますが、-inと-passthruスイッチは何をしますか?コメント – BuddyJoe
@Tyndallは、アドオンのメンバーはまた、パイプライン PS> $のA = "foo" という PS> $ Aで動作します|追加メンバー-memberType ScriptMethod -nameバー - 値{$ this + "bar"} PS> $ a.Foo() foobar – JaredPar
おかげJaredPar – BuddyJoe