2009-05-08 29 views

答えて

8

拡張メソッドで型を修正する方法がわかりません。しかし、それは私が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のの適応タイプを経由して、カスタムタイプの拡張機能を作成することができます
+0

+1で見つけることができます。 $ a = add-memberは少し奇妙に見えますが、-inと-passthruスイッチは何をしますか?コメント – BuddyJoe

+0

@Tyndallは、アドオンのメンバーはまた、パイプライン PS> $のA = "foo" という PS> $ Aで動作します|追加メンバー-memberType ScriptMethod -nameバー - 値{$ this + "bar"} PS> $ a.Foo() foobar – JaredPar

+0

おかげJaredPar – BuddyJoe

9

を追加する方法を持っていることを保証することですシステム。

カスタムタイプ拡張は、プロパティまたはスクリプトメソッドをタイプに記述し、Update-TypeDataコマンドレットを使用してPowerShellセッションにロードするXMLファイルです。

本の偉大な例では、あなたが少し構文について詳しく説明でしPowerShell Team Blog - Hate Add-Member? (PowerShell's Adaptive Type System to the Rescue)

+0

はい、これは元のポスターが探している回答です。 – JasonMArcher

+0

私はこの方法につきものになりました。わからない。私はPowerShellとXMLの両方でできるだけ多くのことをしたいと思います。うーん。もし私がたくさんの "モッズ"を持っていたら、私はこの方法を使うと思います。 – BuddyJoe