<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>BUGBUG: poor title : powershell</title><link>http://blogs.msdn.com/richardb/archive/tags/powershell/default.aspx</link><description>Tags: powershell</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>PowerShell example: adding items from a changeset to a label</title><link>http://blogs.msdn.com/richardb/archive/2007/02/21/powershell-example-adding-items-from-a-changeset-to-a-label.aspx</link><pubDate>Thu, 22 Feb 2007 07:03:24 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1738738</guid><dc:creator>Richard Berg</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/richardb/comments/1738738.aspx</comments><wfw:commentRss>http://blogs.msdn.com/richardb/commentrss.aspx?PostID=1738738</wfw:commentRss><wfw:comment>http://blogs.msdn.com/richardb/rsscomments.aspx?PostID=1738738</wfw:comment><description>&lt;p&gt;A recent &lt;a href="http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=755318&amp;amp;SiteID=1"&gt;request&lt;/a&gt;: "I want to be able to add a label to all files that were modified/added/whatever as part of a changeset."&amp;nbsp; Sounds like a job for PowerShell!&lt;/p&gt; &lt;p&gt;&lt;span style="font-size: 10pt; color: indianred; font-family: 'Courier New'"&gt;function &lt;/span&gt;&lt;span style="font-size: 10pt; color: cornflowerblue; font-family: 'Courier New'"&gt;label-&lt;span class="SpellE"&gt;changeset&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; color: indianred; font-family: 'Courier New'"&gt; (&lt;br&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; color: indianred; font-family: 'Courier New'"&gt;&lt;span style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; color: #a31515; font-family: 'Courier New'"&gt;[&lt;b&gt;string&lt;/b&gt;]&lt;/span&gt;&lt;span style="font-size: 10pt; color: indianred; font-family: 'Courier New'"&gt; &lt;b&gt;$&lt;span class="SpellE"&gt;serverName&lt;/span&gt;&lt;/b&gt;,&amp;nbsp;&lt;br&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; color: indianred; font-family: 'Courier New'"&gt;&lt;span style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; color: #a31515; font-family: 'Courier New'"&gt;[&lt;b&gt;string&lt;/b&gt;]&lt;/span&gt;&lt;span style="font-size: 10pt; color: indianred; font-family: 'Courier New'"&gt; &lt;b&gt;$&lt;span class="SpellE"&gt;labelName&lt;/span&gt;&lt;/b&gt;,&amp;nbsp;&lt;br&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; color: indianred; font-family: 'Courier New'"&gt;&lt;span style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; color: #a31515; font-family: 'Courier New'"&gt;[&lt;span class="SpellE"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/span&gt;]&lt;/span&gt;&lt;span style="font-size: 10pt; color: indianred; font-family: 'Courier New'"&gt; &lt;b&gt;$&lt;span class="SpellE"&gt;changeset&lt;/span&gt;&lt;/b&gt; = &lt;b&gt;$&lt;/b&gt;(throw &lt;/span&gt;&lt;span style="font-size: 10pt; color: cornflowerblue; font-family: 'Courier New'"&gt;'Usage&lt;/span&gt;&lt;span style="font-size: 10pt; color: chocolate; font-family: 'Courier New'"&gt;:&lt;/span&gt;&lt;span style="font-size: 10pt; color: indianred; font-family: 'Courier New'"&gt; &lt;/span&gt;&lt;span style="font-size: 10pt; color: cornflowerblue; font-family: 'Courier New'"&gt;label-&lt;span class="SpellE"&gt;changeset&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; color: indianred; font-family: 'Courier New'"&gt; &lt;/span&gt;&lt;span style="font-size: 10pt; color: cornflowerblue; font-family: 'Courier New'"&gt;&amp;lt;server&amp;gt; &lt;/span&gt;&lt;span style="font-size: 10pt; color: cornflowerblue; font-family: 'Courier New'"&gt;&lt;span class="SpellE"&gt;&amp;lt;labelName&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-size: 10pt; color: indianred; font-family: 'Courier New'"&gt; &lt;/span&gt;&lt;span style="font-size: 10pt; color: cornflowerblue; font-family: 'Courier New'"&gt;&amp;lt;&lt;span class="SpellE"&gt;changeset&lt;/span&gt;&amp;gt;'&lt;/span&gt;&lt;span style="font-size: 10pt; color: indianred; font-family: 'Courier New'"&gt;) )&lt;br&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; color: indianred; font-family: 'Courier New'"&gt;{&lt;br&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; color: indianred; font-family: 'Courier New'"&gt;&lt;span style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="font-size: 10pt; color: mediumseagreen; font-family: 'Courier New'"&gt;# get TFS object&lt;br&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size: 10pt; color: indianred; font-family: 'Courier New'"&gt;&lt;span style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;b&gt;$&lt;span class="SpellE"&gt;tfs&lt;/span&gt;&lt;/b&gt; = &lt;/span&gt;&lt;span style="font-size: 10pt; color: cornflowerblue; font-family: 'Courier New'"&gt;get-&lt;span class="SpellE"&gt;tfs&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; color: indianred; font-family: 'Courier New'"&gt; &lt;b&gt;$&lt;span class="SpellE"&gt;serverName&lt;br&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; color: indianred; font-family: 'Courier New'"&gt;&lt;span style="mso-tab-count: 1"&gt;&lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; color: indianred; font-family: 'Courier New'"&gt;&lt;span style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="font-size: 10pt; color: mediumseagreen; font-family: 'Courier New'"&gt;# set label info&lt;br&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size: 10pt; color: indianred; font-family: 'Courier New'"&gt;&lt;span style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;b&gt;$label&lt;/b&gt; = &lt;/span&gt;&lt;b&gt;&lt;span style="font-size: 10pt; color: royalblue; font-family: 'Courier New'"&gt;new-object&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size: 10pt; color: indianred; font-family: 'Courier New'"&gt; &lt;b&gt;$&lt;span class="SpellE"&gt;tfs&lt;span style="font-weight: normal"&gt;.&lt;/span&gt;&lt;span style="font-weight: normal; color: cornflowerblue"&gt;versioncontrollabel&lt;/span&gt;&lt;/span&gt;&lt;/b&gt; (&lt;b&gt;$tfs&lt;/b&gt;.&lt;/span&gt;&lt;span style="font-size: 10pt; color: cornflowerblue; font-family: 'Courier New'"&gt;vcs&lt;/span&gt;&lt;span style="font-size: 10pt; color: indianred; font-family: 'Courier New'"&gt;, &lt;b&gt;$&lt;span class="SpellE"&gt;labelName&lt;/span&gt;&lt;/b&gt;, &lt;b&gt;$null&lt;/b&gt;, &lt;b&gt;$null&lt;/b&gt;, &lt;/span&gt;&lt;span style="font-size: 10pt; color: #a31515; font-family: 'Courier New'"&gt;"&lt;b&gt;example&lt;/b&gt; &lt;b&gt;label&lt;/b&gt;"&lt;/span&gt;&lt;span style="font-size: 10pt; color: indianred; font-family: 'Courier New'"&gt;)&lt;br&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; color: indianred; font-family: 'Courier New'"&gt;&lt;span style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; color: indianred; font-family: 'Courier New'"&gt;&lt;span style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="font-size: 10pt; color: mediumseagreen; font-family: 'Courier New'"&gt;# build up list of items&lt;br&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size: 10pt; color: indianred; font-family: 'Courier New'"&gt;&lt;span style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;b&gt;$&lt;span class="SpellE"&gt;labelItemSpecs&lt;/span&gt;&lt;/b&gt; = @()&lt;br&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; color: indianred; font-family: 'Courier New'"&gt;&lt;span style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;b&gt;$&lt;span class="SpellE"&gt;tfs&lt;span style="font-weight: normal"&gt;.&lt;/span&gt;&lt;span style="font-weight: normal; color: cornflowerblue"&gt;vcs&lt;/span&gt;&lt;span style="font-weight: normal"&gt;.&lt;/span&gt;&lt;span style="font-weight: normal; color: cornflowerblue"&gt;GetChangeset&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;(&lt;b&gt;$&lt;span class="SpellE"&gt;changeset&lt;/span&gt;&lt;/b&gt;).&lt;/span&gt;&lt;span style="font-size: 10pt; color: cornflowerblue; font-family: 'Courier New'"&gt;Changes&lt;/span&gt;&lt;span style="font-size: 10pt; color: indianred; font-family: 'Courier New'"&gt; &lt;/span&gt;&lt;span style="font-size: 10pt; color: cornflowerblue; font-family: 'Courier New'"&gt;|&lt;/span&gt;&lt;span style="font-size: 10pt; color: indianred; font-family: 'Courier New'"&gt; &lt;/span&gt;&lt;span class="SpellE"&gt;&lt;span style="font-size: 10pt; color: royalblue; font-family: 'Courier New'"&gt;foreach&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; color: indianred; font-family: 'Courier New'"&gt; {&amp;nbsp;&lt;br&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; color: indianred; font-family: 'Courier New'"&gt;&lt;span style="mso-tab-count: 2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;b&gt;$&lt;span class="SpellE"&gt;itemSpec&lt;/span&gt;&lt;/b&gt; = &lt;/span&gt;&lt;b&gt;&lt;span style="font-size: 10pt; color: royalblue; font-family: 'Courier New'"&gt;new-object&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size: 10pt; color: indianred; font-family: 'Courier New'"&gt; &lt;b&gt;$&lt;span class="SpellE"&gt;tfs&lt;span style="font-weight: normal"&gt;.&lt;/span&gt;&lt;span style="font-weight: normal; color: cornflowerblue"&gt;itemspec&lt;/span&gt;&lt;/span&gt;&lt;/b&gt; (&lt;b&gt;$_&lt;/b&gt;.&lt;/span&gt;&lt;span class="SpellE"&gt;&lt;span style="font-size: 10pt; color: cornflowerblue; font-family: 'Courier New'"&gt;Item&lt;/span&gt;&lt;span style="font-size: 10pt; color: indianred; font-family: 'Courier New'"&gt;.&lt;/span&gt;&lt;span style="font-size: 10pt; color: cornflowerblue; font-family: 'Courier New'"&gt;ServerItem&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; color: indianred; font-family: 'Courier New'"&gt;, &lt;b&gt;$&lt;span class="SpellE"&gt;tfs&lt;span style="font-weight: normal"&gt;.&lt;/span&gt;&lt;span style="font-weight: normal; color: cornflowerblue"&gt;recursiontype&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; color: chocolate; font-family: 'Courier New'"&gt;::&lt;/span&gt;&lt;span style="font-size: 10pt; color: cornflowerblue; font-family: 'Courier New'"&gt;none&lt;/span&gt;&lt;span style="font-size: 10pt; color: indianred; font-family: 'Courier New'"&gt;)&lt;br&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; color: indianred; font-family: 'Courier New'"&gt;&lt;span style="mso-tab-count: 2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;b&gt;$&lt;span class="SpellE"&gt;changesetSpec&lt;/span&gt;&lt;/b&gt; = &lt;/span&gt;&lt;b&gt;&lt;span style="font-size: 10pt; color: royalblue; font-family: 'Courier New'"&gt;new-object&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size: 10pt; color: indianred; font-family: 'Courier New'"&gt; &lt;b&gt;$&lt;span class="SpellE"&gt;tfs&lt;span style="font-weight: normal"&gt;.&lt;/span&gt;&lt;span style="font-weight: normal; color: cornflowerblue"&gt;changesetversionspec&lt;/span&gt;&lt;/span&gt;&lt;/b&gt; (&lt;b&gt;$&lt;span class="SpellE"&gt;changeset&lt;/span&gt;&lt;/b&gt;)&lt;br&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; color: indianred; font-family: 'Courier New'"&gt;&lt;span style="mso-tab-count: 2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;b&gt;$&lt;span class="SpellE"&gt;labelItemSpecs&lt;/span&gt;&lt;/b&gt; += &lt;/span&gt;&lt;b&gt;&lt;span style="font-size: 10pt; color: royalblue; font-family: 'Courier New'"&gt;new-object&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size: 10pt; color: indianred; font-family: 'Courier New'"&gt; &lt;b&gt;$&lt;span class="SpellE"&gt;tfs&lt;span style="font-weight: normal"&gt;.&lt;/span&gt;&lt;span style="font-weight: normal; color: cornflowerblue"&gt;labelitemspec&lt;/span&gt;&lt;/span&gt;&lt;/b&gt; (&lt;b&gt;$&lt;span class="SpellE"&gt;itemSpec&lt;/span&gt;&lt;/b&gt;, &lt;b&gt;$&lt;span class="SpellE"&gt;changesetSpec&lt;/span&gt;&lt;/b&gt;, &lt;b&gt;$False&lt;/b&gt;);&lt;br&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; color: indianred; font-family: 'Courier New'"&gt;&lt;span style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&amp;nbsp;&lt;/span&gt;&lt;span style="font-size: 10pt; color: indianred; font-family: 'Courier New'"&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;div class="Section1"&gt; &lt;p class="MsoNormal" style="mso-layout-grid-align: none"&gt;&lt;span style="font-size: 10pt; color: indianred; font-family: 'Courier New'"&gt;&lt;span style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="font-size: 10pt; color: mediumseagreen; font-family: 'Courier New'"&gt;# construct the label&lt;br&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size: 10pt; color: indianred; font-family: 'Courier New'"&gt;&lt;span style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;b&gt;$&lt;span class="SpellE"&gt;tfs&lt;span style="font-weight: normal"&gt;.&lt;/span&gt;&lt;span style="font-weight: normal; color: cornflowerblue"&gt;vcs&lt;/span&gt;&lt;span style="font-weight: normal"&gt;.&lt;/span&gt;&lt;span style="font-weight: normal; color: cornflowerblue"&gt;CreateLabel&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;(&lt;b&gt;$label&lt;/b&gt;, &lt;b&gt;$&lt;span class="SpellE"&gt;labelItemSpecs&lt;/span&gt;&lt;/b&gt;, &lt;b&gt;$&lt;span class="SpellE"&gt;tfs&lt;span style="font-weight: normal"&gt;.&lt;/span&gt;&lt;span style="font-weight: normal; color: cornflowerblue"&gt;LabelChildOption&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; color: chocolate; font-family: 'Courier New'"&gt;::&lt;/span&gt;&lt;span style="font-size: 10pt; color: cornflowerblue; font-family: 'Courier New'"&gt;Replace&lt;/span&gt;&lt;span style="font-size: 10pt; color: indianred; font-family: 'Courier New'"&gt;)&lt;br&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; color: indianred; font-family: 'Courier New'"&gt;}&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Arial','sans-serif'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;o:p&gt;Note the similarity to James' &lt;a href="http://blogs.msdn.com/jmanning/archive/2006/08/08/692281.aspx"&gt;CreateLabel example&lt;/a&gt;.&amp;nbsp; The only difference is that we iterate over the items returned by &lt;strong&gt;GetChangeset&lt;/strong&gt;() instead of taking the items as parameters.&amp;nbsp; And since this is PowerShell, not only does our function create the label on the server, it also returns an honest-to-god&amp;nbsp;&lt;strong&gt;Label&lt;/strong&gt; object you can pipe to other commands.&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;font face="Lucida Console"&gt;RICBERG470&amp;gt; label-changeset &lt;a href="http://jpresto-test:8080"&gt;http://jpresto-test:8080&lt;/a&gt; myLabel 10 &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Lucida Console"&gt;Label&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Scope&amp;nbsp;&amp;nbsp;&amp;nbsp; Status&lt;br&gt;-----&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -----&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;------&lt;br&gt;myLabel&amp;nbsp;&amp;nbsp; $/r&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Created&lt;/font&gt;&lt;/p&gt; &lt;p&gt;Cool!&amp;nbsp; Note: this requires my &lt;a href="http://blogs.msdn.com/richardb/archive/2007/02/21/add-types-ps1-poor-man-s-using-for-powershell.aspx"&gt;modified get-tfs cmdlet&lt;/a&gt;.&lt;/p&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1738738" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/richardb/archive/tags/tfs/default.aspx">tfs</category><category domain="http://blogs.msdn.com/richardb/archive/tags/powershell/default.aspx">powershell</category></item><item><title>add-types.ps1 - poor man's "using" for PowerShell</title><link>http://blogs.msdn.com/richardb/archive/2007/02/21/add-types-ps1-poor-man-s-using-for-powershell.aspx</link><pubDate>Thu, 22 Feb 2007 07:02:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1738734</guid><dc:creator>Richard Berg</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/richardb/comments/1738734.aspx</comments><wfw:commentRss>http://blogs.msdn.com/richardb/commentrss.aspx?PostID=1738734</wfw:commentRss><wfw:comment>http://blogs.msdn.com/richardb/rsscomments.aspx?PostID=1738734</wfw:comment><description>&lt;p&gt;One thing that's missing from PowerShell is the ability to import foreign namespaces into the current context.&amp;nbsp; That leads to a lot of typing at the interactive prompt and bloated hard-to-read lines in your scripts.&amp;nbsp; For example, even if you've loaded the TFS client assemblies, you still have to write out fully-qualified type names like this:&lt;/p&gt; &lt;p&gt;&lt;font face="Lucida Console"&gt;RICBERG470&amp;gt; $itemSpec = new-object Microsoft.TeamFoundation.VersionControl.Client.ItemSpec ("$/foo", [Microsoft.TeamFoundation.VersionControl.Client.RecursionType]::None)&lt;/font&gt;&lt;/p&gt; &lt;p&gt;Ick!&amp;nbsp; &lt;/p&gt; &lt;p&gt;What can we do about it?&amp;nbsp; Well, the first parameter to new-object is actually a string, so we&amp;nbsp;could store the string&amp;nbsp;"Microsoft.TeamFoundation.VersionControl.Client" somewhere convenient and build from there.&lt;/p&gt; &lt;p&gt;&lt;font face="Lucida Console"&gt;RICBERG470&amp;gt; $vcc = "Microsoft.TeamFoundation.VersionControl.Client"&lt;br&gt;RICBERG470&amp;gt; $itemSpec = new-object "$vcc.itemspec" ("$/foo", [Microsoft.TeamFoundation.VersionControl.Client.RecursionType]::None)&lt;/font&gt;&lt;/p&gt; &lt;p&gt;Better, but&amp;nbsp;far from perfect.&lt;/p&gt; &lt;ul&gt; &lt;li&gt;It has to be a real variable -- properties and other expressions won't work.&amp;nbsp; &lt;br&gt;&lt;br&gt;&lt;font face="Lucida Console"&gt;RICBERG470&amp;gt; $tfs = get-tfs jpresto-test&lt;br&gt;RICBERG470&amp;gt; $tfs | add-member noteproperty&amp;nbsp;vcc "Microsoft.TeamFoundation.VersionControl.Client"&lt;br&gt;RICBERG470&amp;gt; new-object "$tfs.vcc.itemspec" ("$/foo", [Microsoft.TeamFoundation.VersionControl.Client.RecursionType]::None)&lt;br&gt;&lt;b&gt;&lt;font color="#ff0000"&gt;New-Object : Cannot find type [jpresto-test.vcc.itemspec]...&lt;/font&gt;&lt;/b&gt;&lt;/font&gt;&lt;br&gt; &lt;/li&gt;&lt;li&gt;It won't work&amp;nbsp;when using [] to reference a type.&amp;nbsp; That will bite us when we want to access a static member/method, or when using enums as in our example.&lt;br&gt; &lt;/li&gt;&lt;li&gt;I thought PowerShell was supposed to get us away from string processing, right?&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Right!&amp;nbsp; &lt;b&gt;Namespaces aren't objects&lt;/b&gt; in PowerShell&lt;b&gt;,&lt;/b&gt;&amp;nbsp;so we can't manipulate them directly, &lt;b&gt;but&lt;/b&gt; &lt;b&gt;types are&lt;/b&gt;.&amp;nbsp; (They're objects of type &lt;font color="#408080"&gt;RuntimeType&lt;/font&gt;, to be exact.)&amp;nbsp; Objects are PowerShell's bread &amp;amp; butter -- importing a ton of them sounds clunkier than "using &amp;lt;namespace&amp;gt;" in C#, but it's actually a cinch.&amp;nbsp; I give you add-types.ps1:&lt;/p&gt;&lt;pre&gt;param(&lt;br&gt;    [&lt;span style="color: blue;"&gt;string&lt;/span&gt;] $assemblyName = $(throw &lt;span style="color: maroon;"&gt;'assemblyName is required'&lt;/span&gt;),&lt;br&gt;    [&lt;span style="color: blue;"&gt;object&lt;/span&gt;] $&lt;span style="color: blue;"&gt;object&lt;/span&gt;&lt;br&gt;)&lt;br&gt;&lt;br&gt;process {&lt;br&gt;	&lt;span style="color: blue;"&gt;if&lt;/span&gt; ($_) {&lt;br&gt;		$&lt;span style="color: blue;"&gt;object&lt;/span&gt; = $_&lt;br&gt;	}&lt;br&gt;	&lt;br&gt;	&lt;span style="color: blue;"&gt;if&lt;/span&gt; (! $&lt;span style="color: blue;"&gt;object&lt;/span&gt;) {&lt;br&gt;		throw &lt;span style="color: maroon;"&gt;'must pass an -object parameter or pipe one in'&lt;/span&gt;&lt;br&gt;	}&lt;br&gt;	&lt;br&gt;	&lt;span style="color: green;"&gt;# load the required dll&lt;/span&gt;&lt;br&gt;	$assembly = [System.Reflection.Assembly]::LoadWithPartialName($assemblyName)&lt;br&gt;	&lt;br&gt;	&lt;span style="color: green;"&gt;# add each type as a member property&lt;/span&gt;&lt;br&gt;	$assembly.GetTypes() | &lt;br&gt;	&lt;span style="color: blue;"&gt;where&lt;/span&gt; {$_.ispublic -and !$_.IsSubclassOf( [Exception] ) -and $_.name -notmatch &lt;span style="color: maroon;"&gt;"event"&lt;/span&gt;} | &lt;br&gt;	&lt;span style="color: blue;"&gt;foreach&lt;/span&gt; { &lt;br&gt;		&lt;span style="color: green;"&gt;# avoid error messages in case it already exists&lt;/span&gt;&lt;br&gt;		&lt;span style="color: blue;"&gt;if&lt;/span&gt; (! ($&lt;span style="color: blue;"&gt;object&lt;/span&gt; | get-member $_.name)) {&lt;br&gt;			add-member noteproperty $_.name $_ -inputobject $&lt;span style="color: blue;"&gt;object&lt;/span&gt;&lt;br&gt;		}&lt;br&gt;	}&lt;br&gt;}&lt;br&gt;&lt;/pre&gt;
&lt;p&gt;Usage example:&lt;/p&gt;
&lt;p&gt;&lt;font face="Lucida Console"&gt;RICBERG470&amp;gt; $tfs | add-types "Microsoft.TeamFoundation.VersionControl.Client"&lt;br&gt;RICBERG470&amp;gt; $itemSpec = new-object $tfs.itemspec("$/foo", $tfs.RecursionType::none)&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;Much better.&amp;nbsp; Not only does it work in the [] case, we don't even need the brackets anymore!&amp;nbsp; Best of all, &lt;b&gt;it works with tab completion.&lt;/b&gt;&amp;nbsp;&amp;nbsp;"RecursionType" above only took 3 keystrokes (and no Shift key).&amp;nbsp; That's why I filter out exceptions &amp;amp; events, BTW&amp;nbsp;-- they pollute the autocomplete list with zillions of types I'd never use in a script, much less interactively.&amp;nbsp; If you disagree, feel free to yank those conditions.&lt;/p&gt;
&lt;p&gt;TFS readers: if you're with me so far, you'll probably want to edit your copy of &lt;a href="http://blogs.msdn.com/jmanning/archive/2006/09/28/776141.aspx" mce_href="http://blogs.msdn.com/jmanning/archive/2006/09/28/776141.aspx"&gt;get-tfs.ps1&lt;/a&gt;.&amp;nbsp; Just add this line to the end of the &lt;font color="#0000ff"&gt;foreach&lt;/font&gt; block:&lt;/p&gt;
&lt;blockquote&gt;&lt;pre&gt;$tfs | add-types $entry[&lt;span style="color: maroon;"&gt;1&lt;/span&gt;]&lt;/pre&gt;&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;&lt;/blockquote&gt;&lt;pre&gt;edit 5/15/07: used IsSubClassOf() instead of -notmatch to filter out exceptions.  Thanks to Jay Bazuzi for the suggestion.&lt;br&gt;&lt;/pre&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1738734" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/richardb/archive/tags/tfs/default.aspx">tfs</category><category domain="http://blogs.msdn.com/richardb/archive/tags/powershell/default.aspx">powershell</category></item></channel></rss>