{"id":10681,"date":"2006-04-25T12:18:01","date_gmt":"2006-04-25T12:18:01","guid":{"rendered":"https:\/\/blogs.msdn.microsoft.com\/powershell\/2006\/04\/25\/getting-msdn-help-urls-for-net-bcl-types-and-members\/"},"modified":"2019-02-18T13:24:58","modified_gmt":"2019-02-18T20:24:58","slug":"getting-msdn-help-urls-for-net-bcl-types-and-members","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/powershell\/getting-msdn-help-urls-for-net-bcl-types-and-members\/","title":{"rendered":"Getting MSDN help urls for .NET BCL types and Members"},"content":{"rendered":"<p>&nbsp;Often when playing with .Net objects in Monad,&nbsp;I need to use <a href=\"http:\/\/msdn2.microsoft.com\/en-us\/library\/ms306608(en-us,vs.80).aspx\">MSDN class library <\/a>reference to learn&nbsp;how to use a particular type and its members. Now, I have my bookmarks and favorite search engine but I always thought it would be cool if <strong><em>get-member<\/em><\/strong> cmdlet could provide me a help link\/reference to go to. Thanks to the way MSDN organizes the class library content this seems possible.&nbsp; MSDN uses the .Net namespace to organize the content. So <a href=\"http:\/\/msdn2.microsoft.com\/library\/System.Diagnostics.Process.aspx\">http:\/\/msdn2.microsoft.com\/library\/System.Diagnostics.Process.aspx<\/a>&nbsp; refers to the page providing information on the Process Type while <a href=\"http:\/\/msdn2.microsoft.com\/library\/System.Diagnostics.Process.Start.aspx\">http:\/\/msdn2.microsoft.com\/library\/System.Diagnostics.Process.Start.aspx<\/a> refers to the page providing information on the Start method.<\/p>\n<p>Using monad&#8217;s Extended Type System (ETS) features&nbsp;and the way MSDN&nbsp;orgranizes the information I can achieve what&nbsp; I want.&nbsp;&nbsp;The get-member cmdlet outputs an object of Type <strong>System.Management.Automation.Commands.MemberDefinition.<\/strong> I will extend this type by adding a ScriptProperty called HelpLink via types.mshxml.&nbsp; The following is the xml snippet that I add to my types.mshxml. The ScriptBlock basically constructs a url string based on the type name and name of the member being accessed. You will have to restart msh to get the changes in.<\/p>\n<p><font color=\"#a52a2a\">&lt;<\/font><font color=\"#a52a2a\" size=\"2\">Type&gt;<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&lt;Name&gt;System.Management.Automation.Commands.MemberDefinition&lt;\/Name&gt;<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&lt;Members&gt;<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;ScriptProperty&gt;<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Name&gt;HelpLink&lt;\/Name&gt;<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;GetScriptBlock&gt;&nbsp; &#8220;<\/font><a href=\"http:\/\/msdn2.microsoft.com\/library\/\"><font color=\"#a52a2a\" size=\"2\">http:\/\/msdn2.microsoft.com\/library\/<\/font><\/a><font color=\"#a52a2a\" size=\"2\">&#8221; + $this.typename +&#8221;.&#8221; +$this.name+&#8221;.aspx&#8221;&lt;\/GetScriptBlock&gt;<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;\/ScriptProperty&gt;<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;\/Members&gt;<br \/>&nbsp;&lt;\/Type&gt;<\/font><\/p>\n<p>&nbsp;This is what the get-member output looks like <strong><em>before<\/em><\/strong> adding the extension.<\/p>\n<p><font color=\"#0000ff\" size=\"2\">MSH&gt; $a = ps msh<\/font><\/p>\n<p><font color=\"#0000ff\" size=\"2\">MSH &gt; $a | get-member -membertype method -name Start | format-list<\/font><\/p>\n<p><font size=\"2\"><font color=\"#0000ff\">TypeName&nbsp;&nbsp; : System.Diagnostics.Process<br \/>Name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : Start<br \/>MemberType : Method<br \/>Definition : System.Boolean Start()<\/font><br \/><\/font><\/p>\n<p>This is what the get-member output looks like <em><strong>after<\/strong><\/em> the extension.<\/p>\n<p><font color=\"#0000ff\" size=\"2\">MSH C:\\&gt; $a | get-member -membertype method -name Start | format-list<\/font><\/p>\n<p><font color=\"#ff0000\" size=\"2\">HelpLink&nbsp;&nbsp; : <\/font><a href=\"http:\/\/msdn2.microsoft.com\/library\/System.Diagnostics.Process.Star\"><font size=\"2\"><a href=\"http:\/\/msdn2.microsoft.com\/library\/System.Diagnostics.Process.Start.aspx\"><font color=\"#ff0000\">http:\/\/msdn2.microsoft.com\/library\/System.Diagnostics.Process.Star<\/font><\/font><\/a><font size=\"2\"><font color=\"#ff0000\">t.aspx<\/font><\/a><br \/><font color=\"#0000ff\">TypeName&nbsp;&nbsp; : System.Diagnostics.Process<br \/>Name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : Start<br \/>MemberType : Method<br \/>Definition : System.Boolean Start()<br \/><\/font><\/font><font color=\"#0000ff\"><font color=\"#000000\"><\/font><\/font><\/p>\n<p><font color=\"#0000ff\"><font color=\"#000000\">I can&nbsp;now navigate to the exact help link directly from monad whenever needed :-). This seems to work ok for types in the base class library, but will not work for COM objects or the adapted objects or any custom types you might have.<\/font><\/font><\/p>\n<p>-Abhishek Agrawal<\/p>\n<p><font color=\"#0000ff\"><font color=\"#000000\"><\/font>&nbsp;<\/p>\n<p><\/font><\/p>\n<p>[<i>Edit: Monad has now been renamed to Windows PowerShell.  This script or discussion may require slight adjustments before it applies directly to newer builds.<\/i>]<\/p>\n","protected":false},"excerpt":{"rendered":"<p>&nbsp;Often when playing with .Net objects in Monad,&nbsp;I need to use MSDN class library reference to learn&nbsp;how to use a particular type and its members. Now, I have my bookmarks and favorite search engine but I always thought it would be cool if get-member cmdlet could provide me a help link\/reference to go to. Thanks [&hellip;]<\/p>\n","protected":false},"author":600,"featured_media":13641,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1],"tags":[],"class_list":["post-10681","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-powershell"],"acf":[],"blog_post_summary":"<p>&nbsp;Often when playing with .Net objects in Monad,&nbsp;I need to use MSDN class library reference to learn&nbsp;how to use a particular type and its members. Now, I have my bookmarks and favorite search engine but I always thought it would be cool if get-member cmdlet could provide me a help link\/reference to go to. Thanks [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/posts\/10681","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/users\/600"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/comments?post=10681"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/posts\/10681\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/media\/13641"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/media?parent=10681"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/categories?post=10681"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/tags?post=10681"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}