<?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>Jason Prickett's Blog : PowerShell</title><link>http://blogs.msdn.com/jpricket/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>Queuing a build in PowerShell</title><link>http://blogs.msdn.com/jpricket/archive/2007/04/25/queuing-a-build-in-powershell.aspx</link><pubDate>Wed, 25 Apr 2007 16:37:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:2272806</guid><dc:creator>Jason Prickett</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/jpricket/comments/2272806.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jpricket/commentrss.aspx?PostID=2272806</wfw:commentRss><description>&lt;P&gt;I just read Aaron's post &lt;A class="" href="http://blogs.msdn.com/aaronhallberg/archive/2007/04/24/team-build-object-model-queueing-a-build.aspx" mce_href="http://blogs.msdn.com/aaronhallberg/archive/2007/04/24/team-build-object-model-queueing-a-build.aspx"&gt;"Team Build Object Model - Queueing a Build"&lt;/A&gt; and I just had convert his code to PowerShell (for those of us that just hate waiting for code to compile!). &lt;/P&gt;
&lt;P&gt;So, here is how to Queue a build in PowerShell (uses my Get-BuildServer script found &lt;A class="" href="http://blogs.msdn.com/jpricket/archive/2007/03/29/various-powershell-scripts.aspx" mce_href="http://blogs.msdn.com/jpricket/archive/2007/03/29/various-powershell-scripts.aspx"&gt;here&lt;/A&gt;):&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&amp;gt; $buildserver = Get-BuildServer "&lt;A href="http://tfs:8080/"&gt;http://tfs:8080&lt;/A&gt;"&lt;BR&gt;&amp;gt; $teamProject = "TeamProject"&lt;BR&gt;&amp;gt; $buildDefinition = "Nightly"&lt;BR&gt;&amp;gt; $definition = $buildserver.GetBuildDefinition($teamProject, $buildDefinition)&lt;BR&gt;&amp;gt; $request = $definition.CreateBuildRequest()&lt;BR&gt;&amp;gt; $buildserver.QueueBuild($request, "None")&amp;nbsp;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;As you can see the code is almost identical (minus the great comments that Aaron's code has). The benefit that I see to doing this in PowerShell is simply that you don't have to open VS, create a new project, write the code, compile it, open the bin folder, and then run the exe. Instead, you can simply open PS, type the code, and see the results.&lt;/P&gt;
&lt;P&gt;Look for more PowerShell scripts coming soon like Queue-Build.ps1!&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=2272806" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jpricket/archive/tags/Team+Build/default.aspx">Team Build</category><category domain="http://blogs.msdn.com/jpricket/archive/tags/PowerShell/default.aspx">PowerShell</category></item><item><title>Getting the Builds Associated with a Changeset Number</title><link>http://blogs.msdn.com/jpricket/archive/2007/03/29/getting-the-builds-associated-with-a-changeset-number.aspx</link><pubDate>Thu, 29 Mar 2007 21:05:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1989898</guid><dc:creator>Jason Prickett</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/jpricket/comments/1989898.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jpricket/commentrss.aspx?PostID=1989898</wfw:commentRss><description>&lt;P&gt;In the Orcas release we allow you to Query for builds (and build definitions) through the object model. However, the number of things you can filter the query on is somewhat limited. &lt;/P&gt;
&lt;P&gt;One of the things that I find that I need to query builds for is the Changeset that they are associated with. Here's the scenario: I checked in a fix sometime in the past that fixed a bug, but my test team says that the bug is still broken in the latest build. I would like to see which build included my fix. Well, it's easy enough for me to look at the bug in TFS and see which changeset is associated with&amp;nbsp;the fix, but I can't easily see which build contained that changeset. So, I need to query the Build Server to get my answer. Unfortunately, the object model does not easily allow me to query on builds by the associated changeset numbers, so, I wrote a PowerShell script.&lt;/P&gt;
&lt;P&gt;The basic idea is that we need to Query for all Builds for a team project, look at each one's associated changesets, and return a list of only those that are associated with the changeset number we care about.&lt;/P&gt;
&lt;P&gt;Here's the code:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $serverName = "http://server:8080"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $teamproject = "projectname"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $changesetId = 123&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $buildserver = &lt;A class="" href="http://blogs.msdn.com/jpricket/archive/2007/03/29/various-powershell-scripts.aspx" mce_href="http://blogs.msdn.com/jpricket/archive/2007/03/29/various-powershell-scripts.aspx"&gt;Get-BuildServer&lt;/A&gt;($servername)&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $spec = $buildserver.CreateBuildDetailSpec()&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $spec.DefinitionPath = "\" + $teamproject + "\**"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $spec.BuildNumber = "*"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $spec.QueryOptions = "None"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $spec.InformationTypes = "AssociatedChangeset"&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $queryResult = $buildserver.QueryBuilds($spec)&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $queryResult.Builds | foreach-object {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $build = $_&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $associatedChangesetNodes = $build.Information.Nodes&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ($associatedChangesetNodes)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $changesets = [int[]]@($associatedChangesetNodes | foreach-object { $_.Fields["ChangesetId"] })&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ($changesets -contains $changesetId)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; add-member -in $build noteproperty "AssociatedChangesets" $changesets -passthru&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P&gt;This script and other useful Build related PowerShell scripts are attached to&amp;nbsp;my &lt;A class="" href="http://blogs.msdn.com/jpricket/archive/2007/03/29/various-powershell-scripts.aspx" mce_href="http://blogs.msdn.com/jpricket/archive/2007/03/29/various-powershell-scripts.aspx"&gt;script post&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;I called this script &amp;nbsp;Get-BuildsForChangeset.ps1 and allowed the server name, team project and changeset number to be passed in. Here is an example of the call and the output:&lt;/P&gt;
&lt;P&gt;&lt;CODE&gt;&lt;FONT face=Arial&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&amp;gt; Get-BuildsForChangeset 'http://jpricket-test:8080' 'jpricket-032707-2' 6&lt;BR&gt;&lt;BR&gt;&lt;FONT face=Arial&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;AssociatedChangesets : {6}&lt;BR&gt;&lt;FONT face=Arial&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;BuildServer : Microsoft.TeamFoundation.Build.Client.BuildServer&lt;BR&gt;&lt;FONT face=Arial&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;BuildAgent :&lt;BR&gt;&lt;FONT face=Arial&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;BuildDefinition :&lt;BR&gt;&lt;FONT face=Arial&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;BuildFinished : True&lt;BR&gt;&lt;FONT face=Arial&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;BuildNumber : Nightly_20070329.2&lt;BR&gt;&lt;FONT face=Arial&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;CompilationStatus : Succeeded&lt;BR&gt;&lt;FONT face=Arial&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;ConfigurationFolderPath : $/jpricket-032707-2/TeamBuildTypes/Nightly&lt;BR&gt;&lt;FONT face=Arial&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;DropLocation : \\jpricket-test\drops\Nightly_20070329.2&lt;BR&gt;&lt;FONT face=Arial&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;FinishTime : 3/29/2007 1:32:15 PM&lt;BR&gt;&lt;FONT face=Arial&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;Information : Microsoft.TeamFoundation.Build.Client.BuildInformation&lt;BR&gt;&lt;FONT face=Arial&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;LogLocation : \\jpricket-test\drops\Nightly_20070329.2\BuildLog.txt&lt;BR&gt;&lt;FONT face=Arial&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;Quality :&lt;BR&gt;&lt;FONT face=Arial&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;Status : Succeeded&lt;BR&gt;&lt;FONT face=Arial&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;TestStatus : Succeeded&lt;BR&gt;&lt;FONT face=Arial&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;Uri : vstfs:///Build/Build/9&lt;BR&gt;&lt;FONT face=Arial&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;BuildDefinitionUri : vstfs:///Build/Definition/1&lt;BR&gt;&lt;FONT face=Arial&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;CommandLineArguments :&lt;BR&gt;&lt;FONT face=Arial&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;StartTime : 3/29/2007 1:31:48 PM&lt;BR&gt;&lt;FONT face=Arial&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;BuildAgentUri : vstfs:///Build/Agent/1&lt;BR&gt;&lt;FONT face=Arial&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;ConfigurationFolderUri : vstfs:///VersionControl/VersionedItem...&lt;BR&gt;&lt;FONT face=Arial&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;ConfigurationFolderGetTime : 3/29/2007 1:31:48 PM&lt;BR&gt;&lt;FONT face=Arial&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;SourceGetVersion : C6&lt;BR&gt;&lt;FONT face=Arial&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;RequestedFor : NORTHAMERICA\jpricket&lt;BR&gt;&lt;FONT face=Arial&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;RequestedBy : NORTHAMERICA\jpricket&lt;BR&gt;&lt;FONT face=Arial&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;LastChangedOn : 3/29/2007 1:32:14 PM&lt;BR&gt;&lt;FONT face=Arial&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;LastChangedBy : REDMOND\bissvc&lt;BR&gt;&lt;FONT face=Arial&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;KeepForever : False&lt;BR&gt;&lt;FONT face=Arial&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;LabelName : Nightly_20070329.2@$/jpricket-032707-2&lt;BR&gt;&lt;/CODE&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1989898" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jpricket/archive/tags/Team+Build/default.aspx">Team Build</category><category domain="http://blogs.msdn.com/jpricket/archive/tags/PowerShell/default.aspx">PowerShell</category></item><item><title>Various PowerShell scripts</title><link>http://blogs.msdn.com/jpricket/archive/2007/03/29/various-powershell-scripts.aspx</link><pubDate>Thu, 29 Mar 2007 20:54:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1989765</guid><dc:creator>Jason Prickett</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/jpricket/comments/1989765.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jpricket/commentrss.aspx?PostID=1989765</wfw:commentRss><description>&lt;P&gt;&amp;lt;Copying this post almost directly from &lt;A class="" href="http://blogs.msdn.com/jmanning/pages/various-powershell-scripts.aspx" mce_href="http://blogs.msdn.com/jmanning/pages/various-powershell-scripts.aspx"&gt;James&lt;/A&gt;, but the scripts are my own. See his blog for more TFS scripts.&amp;gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;This page just gives me a place to keep a most-recent-copy of my various PowerShell scripts, mostly related to Team Build.&amp;nbsp; This makes it easier for people that want to use them than having to copy-paste from lots of different blog posts.&lt;/P&gt;
&lt;P&gt;Contents:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Get-BuildServer.ps1 - given a TFS server name, it returns an instance of IBuildServer (Orcas only)&lt;/LI&gt;
&lt;LI&gt;Get-BuildsForChangeset.ps1 - given a TFS server name, team project, and changeset number,&amp;nbsp;it returns a list of all builds that&amp;nbsp;included that changeset (Orcas only)&lt;/LI&gt;
&lt;LI&gt;(more to come)&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;History:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;2007-03-29: initial posting&lt;/LI&gt;&lt;/UL&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1989765" width="1" height="1"&gt;</description><enclosure url="http://blogs.msdn.com/jpricket/attachment/1989765.ashx" length="931" type="application/x-zip-compressed" /><category domain="http://blogs.msdn.com/jpricket/archive/tags/PowerShell/default.aspx">PowerShell</category></item><item><title>Average Build Size</title><link>http://blogs.msdn.com/jpricket/archive/2007/03/20/average-build-size.aspx</link><pubDate>Tue, 20 Mar 2007 22:24:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1921105</guid><dc:creator>Jason Prickett</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/jpricket/comments/1921105.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jpricket/commentrss.aspx?PostID=1921105</wfw:commentRss><description>&lt;P&gt;So, I haven't actually gotten a request for this, but I thought it might be useful :)&lt;/P&gt;
&lt;P&gt;This entry is based on Team Build's next version which is available in a CTP release right now, and will be in Beta very soon (don't ask, I don't know when). In the next version of Team Build, we have included an Object Model (OM) that wraps all the functionality of the Web Services. This makes writing your own apps that need build information, much easier.&lt;/P&gt;
&lt;P&gt;Let's say you are using the new features of Team Build like drop management and continuous integration. So far you have the binaries for 12 builds sitting on your server for definition X. You notice you are almost out of disk space on that server and need to purchase some more. But how much? After looking at your drop managment policy for definition X, you see that the maximum number of builds you will need to keep is 20. But how much disk space does that correspond to? You could go to the drop location and sum up the size of every folder, but is there a faster way? Of course there is!&lt;/P&gt;
&lt;P&gt;In the following PowerShell script, I get the list of builds for definition X and then sum up the size of all files in the drop locations. &lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&amp;gt; [void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.TeamFoundation.Client")&lt;BR&gt;&amp;gt; [void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.TeamFoundation.Build.Client")&lt;BR&gt;&amp;gt; $tfs = [Microsoft.TeamFoundation.Client.TeamFoundationServerFactory]::GetServer("&lt;A href="http://server:8080/" mce_href="http://server:8080/"&gt;http://server:8080/&lt;/A&gt;")&lt;BR&gt;&amp;gt; $buildserver = $tfs.GetService([Microsoft.TeamFoundation.Build.Client.IBuildServer])&lt;BR&gt;&amp;gt; $buildspec = $buildserver.CreateBuildDetailSpec()&lt;BR&gt;&amp;gt; $buildspec.DefinitionPath = "\teamproject\CSharp_Tests"&lt;BR&gt;&amp;gt; $buildspec.BuildNumber = "*"&lt;BR&gt;&amp;gt; $queryResult = $buildserver.QueryBuilds($buildspec)&lt;BR&gt;&amp;gt; $queryResult.Builds&amp;nbsp; | foreach { Get-ChildItem $_.droplocation -force -recurse | measure-object length -sum } | measure-object sum -average -sum&lt;/P&gt;
&lt;P&gt;Count&amp;nbsp;&amp;nbsp;&amp;nbsp; : 4&lt;BR&gt;Average&amp;nbsp; : 341554&lt;BR&gt;Sum&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : 1366216&lt;BR&gt;Maximum&amp;nbsp; :&lt;BR&gt;Minimum&amp;nbsp; :&lt;BR&gt;Property : Sum&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;The most complicated part of the script is the last line that sums and averages everything. This could be a little simple, but I had some issues using the normal foreach ($b in $queryResult.Buidls). Piping the builds into the foreach uses a slightly different version of that command and worked better in this case. Basically, that line loops over the builds, calls Get-ChildItem recursively for all the files in the drop location (even hidden files, that's the -force options) and sums up the length property of all the files. Finally, it averages and sums the list of file length sums and reports on that result.&lt;/P&gt;
&lt;P&gt;I hope some one finds this information useful!&lt;BR&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1921105" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jpricket/archive/tags/Team+Build/default.aspx">Team Build</category><category domain="http://blogs.msdn.com/jpricket/archive/tags/PowerShell/default.aspx">PowerShell</category></item><item><title>Team Build OM thru PowerShell - Example GetAffectedBuildDefinitions</title><link>http://blogs.msdn.com/jpricket/archive/2007/03/05/team-build-om-thru-powershell-example-getaffectedbuilddefinitions.aspx</link><pubDate>Mon, 05 Mar 2007 21:56:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1811761</guid><dc:creator>Jason Prickett</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/jpricket/comments/1811761.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jpricket/commentrss.aspx?PostID=1811761</wfw:commentRss><description>&lt;P&gt;Well, it's been a long time since I have had the time (okay made the time) to blog on something interesting. To make up for that, I have a quick entry that includes all kinds of interesting tidbits.&lt;/P&gt;
&lt;P&gt;This entry is based on Team Build's next version which is available in a CTP release right now, and will be in Beta very soon (don't ask, I don't know when). In the next version of Team Build, we have included an Object Model (OM) that wraps all the functionality of the Web Services. This makes writing your own apps that need build information, much easier.&lt;/P&gt;
&lt;P&gt;As I talk about how to use the methods and objects in the OM, I will show examples using PowerShell commands. PowerShell is an incredible recently new shell for Windows, that allows you to manipulate not just text output by command line apps, but real objects returned from any managed library. If you want to know more (and you should), goto to &lt;A href="http://www.microsoft.com/PowerShell" mce_href="http://www.microsoft.com/PowerShell"&gt;http://www.microsoft.com/PowerShell&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;So, here's a quick example:&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Problem:&lt;/STRONG&gt; What Build Definitions are building this C Sharp project?&lt;/P&gt;
&lt;P&gt;You can't find this out in Visual Studio without looking at every Build Definition's workspace mappings. But there's a simple OM call that can do the work for you - GetAffectedBuildDefinitions. All you have to do is&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Get a TeamFoundationServer object.&lt;/LI&gt;
&lt;LI&gt;Get the IBuildServer from the TFS object.&lt;/LI&gt;
&lt;LI&gt;Create a string array that contains the server path to the project file.&lt;/LI&gt;
&lt;LI&gt;Pass that string array to the GetAffectedBuildDefinitions method of IBuildServer.&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;Here's the PowerShell commands...&lt;/P&gt;
&lt;HR&gt;
&lt;CODE&gt;
&lt;P&gt;Windows PowerShell&lt;BR&gt;Copyright (C) 2006 Microsoft Corporation. All rights reserved.&lt;/P&gt;
&lt;P&gt;PS C:\&amp;gt; [void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.TeamFoundation.Client") &lt;BR&gt;PS C:\&amp;gt; [void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.TeamFoundation.Build.Client") &lt;BR&gt;PS C:\&amp;gt; $serverName="http://server:8080/" &lt;BR&gt;PS C:\&amp;gt; $tfs = [Microsoft.TeamFoundation.Client.TeamFoundationServerFactory]::GetServer($serverName) &lt;BR&gt;PS C:\&amp;gt; $buildserver = $tfs.GetService([Microsoft.TeamFoundation.Build.Client.IBuildServer]) &lt;BR&gt;PS C:\&amp;gt; $defs = $buildserver.GetAffectedBuildDefinitions("$/teamproj/app1/app1/app1.csproj") &lt;BR&gt;PS C:\&amp;gt; $defs | select TeamProject, Name, Uri&lt;/P&gt;
&lt;P&gt;TeamProject&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Name&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Uri&lt;BR&gt;-----------&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;----&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;---&lt;BR&gt;teamproj&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Continuous&amp;nbsp;&amp;nbsp;&amp;nbsp;vstfs:///Build/Definition/2&lt;BR&gt;teamproj&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Nightly&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;vstfs:///Build/Definition/1&lt;/P&gt;&lt;/CODE&gt;
&lt;HR&gt;

&lt;P mce_keep="true"&gt;If you don't understand something let me know or look it up in the PowerShell docs. I am new to PowerShell myself, but I know some gurus.&lt;/P&gt;
&lt;P mce_keep="true"&gt;I hope this simple example whets your appetite for PowerShell and the Team Build Object Model. More to come...&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1811761" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jpricket/archive/tags/Team+Build/default.aspx">Team Build</category><category domain="http://blogs.msdn.com/jpricket/archive/tags/PowerShell/default.aspx">PowerShell</category></item></channel></rss>