---
title: PowerShell script to get list of modified files from a Bug / PBI in TFS across changesets
description: PowerShell script to get list of modified files from a Bug / PBI in TFS across changesets
---

# PowerShell script to get list of modified files from a Bug / PBI in TFS across changesets

Posted by Leo Vildosola - July 05, 2012

- [**](https://www.facebook.com/sharer/sharer.php?u=https://blogs.incyclesoftware.com/2012/07/powershell-script-to-get-list-of-modified-files-from-a-bug-pbi-in-tfs-across-changesets/)
- [**](https://www.linkedin.com/shareArticle?mini=true&url=https://blogs.incyclesoftware.com/2012/07/powershell-script-to-get-list-of-modified-files-from-a-bug-pbi-in-tfs-across-changesets/&title=&summary=&source=)
- [**](https://twitter.com/home?status=)
- [**](mailto:?&subject=https://blogs.incyclesoftware.com/2012/07/powershell-script-to-get-list-of-modified-files-from-a-bug-pbi-in-tfs-across-changesets/&body=https://blogs.incyclesoftware.com/2012/07/powershell-script-to-get-list-of-modified-files-from-a-bug-pbi-in-tfs-across-changesets/)

**

![header-picture](https://blogs.incyclesoftware.com/hubfs/Incycle%202017%20website%20resources/Concentrated%20bearded%20young%20man%20using%20laptop%20while%20his%20friends%20studying%20together.jpeg "header-picture")

Sometimes, when we need to quickly determine which files were changed across multiple changesets, we just want a list. We don’t want to have to open one work item check its changesets then go to another, etc. The following [PowerShell](http://en.wikipedia.org/wiki/Windows_PowerShell) script does just that.

Let me set the scenario. We use the [Microsoft Visual Studio Scrum 1.0](http://visualstudiogallery.msdn.microsoft.com/59ac03e3-df99-4776-be39-1917cbfc5d8e/)process template. In fact, now that we’re using [TFS 2012](http://www.microsoft.com/visualstudio/11/en-us/downloads) RC we upgraded our Team Project to using the [Visual Studio Scrum 2.0](http://msdn.microsoft.com/en-us/library/tfs/ff731587(v=vs.110).aspx)process template. During our day-to-day we do work against Tasks that are associated to Bugs or Product Backlog Items. So, when we want to get a list of changed files, we want to simply point to the Bug or PBI. In the script below you just need to specify the $tfsUrl and $wiId attributes and execute the it.

```
[Reflection.Assembly]::Load(<span style="color: #006080">&quot;Microsoft.TeamFoundation.Client, Version=11.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a&quot;</span>)
```

```
[Reflection.Assembly]::Load(<span style="color: #006080">&quot;Microsoft.TeamFoundation.VersionControl.Client, Version=11.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a&quot;</span>)
```

```
[Reflection.Assembly]::Load(<span style="color: #006080">&quot;Microsoft.TeamFoundation.WorkItemTracking.Client, Version=11.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a&quot;</span>)
```

```
&#160;
```

```
cls
```

```
&#160;
```

```
$tfsUrl = <span style="color: #006080">&quot;http://&lt;SERVER&gt;[PORT, e.g. :8080]/tfs/&lt;COLLECTION&gt;&quot;</span>
```

```
$wiId = <span style="color: #006080">&quot;9999&quot;</span>
```

```
&#160;
```

```
try {
```

```
    $tfs = New-Object Microsoft.TeamFoundation.Client.TfsTeamProjectCollection $tfsUrl
```

```
    $vcs = $tfs.GetService([Microsoft.TeamFoundation.VersionControl.Client.VersionControlServer]);
```

```
    $store = New-Object Microsoft.TeamFoundation.WorkItemTracking.Client.WorkItemStore $tfs
```

```
    $wi = $store.GetWorkItem($wiId)
```

```
    
```

```
    <span style="color: #0000ff">if</span> ($wi <span style="color: #cc6633">-ne</span> $null) {
```

```
        $changesets = <span style="color: #006080">&quot;&quot;</span>
```

```
&#160;
```

```
        $wi.Links | <span style="color: #0000ff">foreach</span> {
```

```
            $relLink = [Microsoft.TeamFoundation.WorkItemTracking.Client.RelatedLink] $null
```

```
            try { $relLink = [Microsoft.TeamFoundation.WorkItemTracking.Client.RelatedLink] $_; } catch {}
```

```
            <span style="color: #0000ff">if</span> ($relLink <span style="color: #cc6633">-ne</span> $null) {
```

```
                $wiChild = $store.GetWorkItem($relLink.RelatedWorkItemId)
```

```
                <span style="color: #0000ff">if</span> ($wiChild <span style="color: #cc6633">-ne</span> $null) {
```

```
                    $wiChild.Links | <span style="color: #0000ff">foreach</span> {
```

```
                        $extLink = [Microsoft.TeamFoundation.WorkItemTracking.Client.ExternalLink] $null
```

```
                        try { $extLink = [Microsoft.TeamFoundation.WorkItemTracking.Client.ExternalLink] $_; } catch {}
```

```
                        <span style="color: #0000ff">if</span> ($extLink <span style="color: #cc6633">-ne</span> $null) {
```

```
                            $artifact = $extLink.LinkedArtifactUri;
```

```
                            <span style="color: #0000ff">if</span> ([System.Text.RegularExpressions.Regex]::Match($artifact, <span style="color: #006080">'.*(/Changeset/).*'</span>).Success) {
```

```
                                $changesetId = $artifact.Substring($artifact.LastIndexOf(<span style="color: #006080">'/'</span>) + 1);
```

```
                                $separator = <span style="color: #006080">&quot;&quot;</span>
```

```
                                <span style="color: #0000ff">if</span> ($changesets.Length <span style="color: #cc6633">-gt</span> 0) {
```

```
                                    $separator = <span style="color: #006080">&quot;,&quot;</span>
```

```
                                }
```

```
                                $changesets = [string]::Concat($changesets, $separator, $changesetId)
```

```
                            }
```

```
                        }
```

```
                    }
```

```
                }
```

```
            }
```

```
        }
```

```
&#160;
```

```
        $fileItems = @();
```

```
&#160;
```

```
        $changesets.Split(<span style="color: #006080">','</span>) | <span style="color: #0000ff">foreach</span> {
```

```
            $vcs.GetChangeset($_).Changes | <span style="color: #0000ff">foreach</span> {
```

```
                <span style="color: #0000ff">if</span> ($fileItems -notcontains $_.Item.ServerItem) {
```

```
                    $fileItems += $_.Item.ServerItem;
```

```
                }
```

```
            }
```

```
        }
```

```
    
```

```
        $fileItems | Sort-Object;
```

```
    }
```

```
}
```

```
catch [System.Exception] {
```

```
    <span style="color: #006080">'Error: Unable to fetch changeset information!'</span>
```

```
    Write-Host $_.Exception.Message -ForegroundColor Red
```

```
}
```

The one drawback of the script is that it only works with 2-level, parent-child relationships. So, Bug-to-Task or PBI-to-Task. If you’re accustom to nesting these deeper then you will need to adapt the script accordingly.

We use the script internally to isolate changes when we want to either do a code review (a lot easier now with [Visual Studio 2012](http://www.microsoft.com/visualstudio/11/en-us)) or when we want to isolate the files to package to send to a customer. Enjoy!

 Topics: [Blog](https://blogs.incyclesoftware.com/topic/blog)

---

### Recent Posts

By InCycle - 05 July, 2012

#### InCycle Wins Prestigious Microsoft Global Partner of the Year Award

[![read more](https://cdn2.hubspot.net/hubfs/685080/IMG-TurboSodium/Sodium%20v2/blog/arrow-recent-blog-post.png "read more")](https://blogs.incyclesoftware.com/incycle-wins-prestigious-microsoft-global-partner-of-the-year-award)

By InCycle - 05 July, 2012

#### Top 5 Questions On Elevate for App Modernization

[![read more](https://cdn2.hubspot.net/hubfs/685080/IMG-TurboSodium/Sodium%20v2/blog/arrow-recent-blog-post.png "read more")](https://blogs.incyclesoftware.com/top-five-questions-on-elevate-for-app-modernization)

By InCycle - 05 July, 2012

#### GitHub Universe 2025 Top Announcements

[![read more](https://cdn2.hubspot.net/hubfs/685080/IMG-TurboSodium/Sodium%20v2/blog/arrow-recent-blog-post.png "read more")](https://blogs.incyclesoftware.com/github-universe-2025-top-announcements)

---

### Subscribe to Blog

### ![2025 Microsoft Partner of the Year Winner: InCycle Software](https://blogs.incyclesoftware.com/hs-fs/hubfs/InCycle%202025%20Microsoft%20PoY%20Badge.png?width=377&height=223&name=InCycle%202025%20Microsoft%20PoY%20Badge.png)

### About this blog

Since 2002, InCycle has been providing challenging thought leadership to help customers successfully combine modern application designs, IT platforms and DevOps practices to achieve new levels of success. As a leader in app modernization, these blogs are written by our expert consultants and provide useful information to help on your journey to the cloud and better software. Happy reading!

### Platform Engineering Webinar on Demand

PE deep dive and demo!

[![Learn More!](https://no-cache.hubspot.com/cta/default/707613/aae0556f-2d26-4ce4-9b32-e7bebd443c9a.png)](https://cta-redirect.hubspot.com/cta/redirect/707613/aae0556f-2d26-4ce4-9b32-e7bebd443c9a)

### Recent Posts

### Migrating to GitHub?

Start with a GitHub Migration Strategy and Roadmap (at no cost!)

[![Learn More!](https://no-cache.hubspot.com/cta/default/707613/312dc03f-1f78-4907-aaaf-3c0aa3cccd8f.png)](https://cta-redirect.hubspot.com/cta/redirect/707613/312dc03f-1f78-4907-aaaf-3c0aa3cccd8f)

### Posts by Topic

- [Blog (194)](https://blogs.incyclesoftware.com/topic/blog)
- [Video (32)](https://blogs.incyclesoftware.com/topic/video)
- [Azure (25)](https://blogs.incyclesoftware.com/topic/azure)
- [DevOps (20)](https://blogs.incyclesoftware.com/topic/devops)
- [GitHub (13)](https://blogs.incyclesoftware.com/topic/github)
- [InRelease (12)](https://blogs.incyclesoftware.com/topic/inrelease)
- [Containers (11)](https://blogs.incyclesoftware.com/topic/containers)
- [release management (11)](https://blogs.incyclesoftware.com/topic/release-management)
- [AKS (10)](https://blogs.incyclesoftware.com/topic/aks)
- [CI/CD (10)](https://blogs.incyclesoftware.com/topic/ci-cd)
- [Kubernetes (10)](https://blogs.incyclesoftware.com/topic/kubernetes)
- [Azure DevOps (9)](https://blogs.incyclesoftware.com/topic/azure-devops)
- [Migration (9)](https://blogs.incyclesoftware.com/topic/migration)
- [Platform Engineering (PE) (9)](https://blogs.incyclesoftware.com/topic/platform-engineering-pe)
- [GenAI (8)](https://blogs.incyclesoftware.com/topic/genai)
- [Microsoft Azure (8)](https://blogs.incyclesoftware.com/topic/microsoft-azure)
- [Visual Studio (8)](https://blogs.incyclesoftware.com/topic/visual-studio)
- [tfs (8)](https://blogs.incyclesoftware.com/topic/tfs)
- [Awards (7)](https://blogs.incyclesoftware.com/topic/awards)
- [Big Data (6)](https://blogs.incyclesoftware.com/topic/big-data)
- [Innovation (6)](https://blogs.incyclesoftware.com/topic/innovation)
- [Microsoft (6)](https://blogs.incyclesoftware.com/topic/microsoft)
- [agile (6)](https://blogs.incyclesoftware.com/topic/agile)
- [vsts (6)](https://blogs.incyclesoftware.com/topic/vsts)
- [Data (5)](https://blogs.incyclesoftware.com/topic/data)
- [Modernization (5)](https://blogs.incyclesoftware.com/topic/modernization)
- [App Modernization (4)](https://blogs.incyclesoftware.com/topic/app-modernization)
- [Automated Testing (4)](https://blogs.incyclesoftware.com/topic/automated-testing)
- [Data & AI (4)](https://blogs.incyclesoftware.com/topic/data-ai)
- [Event (4)](https://blogs.incyclesoftware.com/topic/event)
- [MLOps (4)](https://blogs.incyclesoftware.com/topic/mlops)
- [Modern Apps (4)](https://blogs.incyclesoftware.com/topic/modern-apps)
- [Visual Studio 2017 (4)](https://blogs.incyclesoftware.com/topic/visual-studio-2017)
- [DevTest (3)](https://blogs.incyclesoftware.com/topic/devtest)
- [Events (3)](https://blogs.incyclesoftware.com/topic/events)
- [Governance (3)](https://blogs.incyclesoftware.com/topic/governance)
- [VSO (3)](https://blogs.incyclesoftware.com/topic/vso)
- [Data Analytics (2)](https://blogs.incyclesoftware.com/topic/data-analytics)
- [Docker (2)](https://blogs.incyclesoftware.com/topic/docker)
- [Integration (2)](https://blogs.incyclesoftware.com/topic/integration)
- [Microsoft Connect (2)](https://blogs.incyclesoftware.com/topic/microsoft-connect)
- [Mobile Development (2)](https://blogs.incyclesoftware.com/topic/mobile-development)
- [RM (2)](https://blogs.incyclesoftware.com/topic/rm)
- [SQL (2)](https://blogs.incyclesoftware.com/topic/sql)
- [SaaS (2)](https://blogs.incyclesoftware.com/topic/saas)
- [TFS 15 Preview (2)](https://blogs.incyclesoftware.com/topic/tfs-15-preview)
- [TFS 2017 (2)](https://blogs.incyclesoftware.com/topic/tfs-2017)
- [Uncategorized (2)](https://blogs.incyclesoftware.com/topic/uncategorized)
- [Visual Studio 2015 (2)](https://blogs.incyclesoftware.com/topic/visual-studio-2015)
- [Xamarin (2)](https://blogs.incyclesoftware.com/topic/xamarin)
- [ADX (1)](https://blogs.incyclesoftware.com/topic/adx)
- [AI (1)](https://blogs.incyclesoftware.com/topic/ai)
- [Android (1)](https://blogs.incyclesoftware.com/topic/android)
- [Application Monitoring (1)](https://blogs.incyclesoftware.com/topic/application-monitoring)
- [Apps (1)](https://blogs.incyclesoftware.com/topic/apps)
- [BI (1)](https://blogs.incyclesoftware.com/topic/bi)
- [Brian Harry (1)](https://blogs.incyclesoftware.com/topic/brian-harry)
- [Cloud Azure (1)](https://blogs.incyclesoftware.com/topic/cloud-azure)
- [Cloud Services (1)](https://blogs.incyclesoftware.com/topic/cloud-services)
- [Connect (1)](https://blogs.incyclesoftware.com/topic/connect)
- [Connect 2016 (1)](https://blogs.incyclesoftware.com/topic/connect-2016)
- [Consultants (1)](https://blogs.incyclesoftware.com/topic/consultants)
- [Cosmos DB (1)](https://blogs.incyclesoftware.com/topic/cosmos-db)
- [Data Center (1)](https://blogs.incyclesoftware.com/topic/data-center)
- [Development (1)](https://blogs.incyclesoftware.com/topic/development)
- [EA (1)](https://blogs.incyclesoftware.com/topic/ea)
- [Git (1)](https://blogs.incyclesoftware.com/topic/git)
- [Hybrid (1)](https://blogs.incyclesoftware.com/topic/hybrid)
- [IntelliTes (1)](https://blogs.incyclesoftware.com/topic/intellites)
- [IntelliTest (1)](https://blogs.incyclesoftware.com/topic/intellitest)
- [Lab Management (1)](https://blogs.incyclesoftware.com/topic/lab-management)
- [Live Unit Testing (1)](https://blogs.incyclesoftware.com/topic/live-unit-testing)
- [Load Testing (1)](https://blogs.incyclesoftware.com/topic/load-testing)
- [MSDN (1)](https://blogs.incyclesoftware.com/topic/msdn)
- [MSTest (1)](https://blogs.incyclesoftware.com/topic/mstest)
- [MTM (1)](https://blogs.incyclesoftware.com/topic/mtm)
- [Machine Learning (1)](https://blogs.incyclesoftware.com/topic/machine-learning)
- [Media & Entertainment (1)](https://blogs.incyclesoftware.com/topic/media-entertainment)
- [Microsoft Visual Studio (1)](https://blogs.incyclesoftware.com/topic/microsoft-visual-studio)
- [Microsoft nationally managed partner (1)](https://blogs.incyclesoftware.com/topic/microsoft-nationally-managed-partner)
- [NUnit (1)](https://blogs.incyclesoftware.com/topic/nunit)
- [OpsHub (1)](https://blogs.incyclesoftware.com/topic/opshub)
- [PaaS (1)](https://blogs.incyclesoftware.com/topic/paas)
- [Pipelines (1)](https://blogs.incyclesoftware.com/topic/pipelines)
- [PowerShell (1)](https://blogs.incyclesoftware.com/topic/powershell)
- [Principles and Practices of DevOps (1)](https://blogs.incyclesoftware.com/topic/principles-and-practices-of-devops)
- [Programs (1)](https://blogs.incyclesoftware.com/topic/programs)
- [RC (1)](https://blogs.incyclesoftware.com/topic/rc)
- [Release Candidate (1)](https://blogs.incyclesoftware.com/topic/release-candidate)
- [SQL Databases (1)](https://blogs.incyclesoftware.com/topic/sql-databases)
- [SQL server (1)](https://blogs.incyclesoftware.com/topic/sql-server)
- [SSDT (1)](https://blogs.incyclesoftware.com/topic/ssdt)
- [Software (1)](https://blogs.incyclesoftware.com/topic/software)
- [Subscription & Billing Management (1)](https://blogs.incyclesoftware.com/topic/subscription-billing-management)
- [TFS 15 (1)](https://blogs.incyclesoftware.com/topic/tfs-15)
- [TFS 2015 update (1)](https://blogs.incyclesoftware.com/topic/tfs-2015-update)
- [TFS 2016 (1)](https://blogs.incyclesoftware.com/topic/tfs-2016)
- [TFS ALM (1)](https://blogs.incyclesoftware.com/topic/tfs-alm)
- [TestMethods (1)](https://blogs.incyclesoftware.com/topic/testmethods)
- [UI (1)](https://blogs.incyclesoftware.com/topic/ui)
- [UX (1)](https://blogs.incyclesoftware.com/topic/ux)
- [VS2017 (1)](https://blogs.incyclesoftware.com/topic/vs2017)
- [Validation (1)](https://blogs.incyclesoftware.com/topic/validation)
- [Virtual Machines (1)](https://blogs.incyclesoftware.com/topic/virtual-machines)
- [WPC 2016 (1)](https://blogs.incyclesoftware.com/topic/wpc-2016)
- [Web (1)](https://blogs.incyclesoftware.com/topic/web)
- [Windows (1)](https://blogs.incyclesoftware.com/topic/windows)
- [World Partner Conference (1)](https://blogs.incyclesoftware.com/topic/world-partner-conference)
- [XUnit (1)](https://blogs.incyclesoftware.com/topic/xunit)
- [alm (1)](https://blogs.incyclesoftware.com/topic/alm)
- [automation (1)](https://blogs.incyclesoftware.com/topic/automation)
- [build (1)](https://blogs.incyclesoftware.com/topic/build)
- [code (1)](https://blogs.incyclesoftware.com/topic/code)
- [nationally managed partner (1)](https://blogs.incyclesoftware.com/topic/nationally-managed-partner)
- [sql server 2008 (1)](https://blogs.incyclesoftware.com/topic/sql-server-2008)
- [unit testing (1)](https://blogs.incyclesoftware.com/topic/unit-testing)
- [vm (1)](https://blogs.incyclesoftware.com/topic/vm)

[see all](https://blogs.incyclesoftware.com/2012/07/powershell-script-to-get-list-of-modified-files-from-a-bug-pbi-in-tfs-across-changesets/#)

### Blog Archive

- [November 2012 (17)](https://blogs.incyclesoftware.com/archive/2012/11)
- [September 2025 (14)](https://blogs.incyclesoftware.com/archive/2025/09)
- [October 2014 (12)](https://blogs.incyclesoftware.com/archive/2014/10)
- [July 2012 (10)](https://blogs.incyclesoftware.com/archive/2012/07)
- [October 2012 (9)](https://blogs.incyclesoftware.com/archive/2012/10)

- [**](https://twitter.com/incyclesoftware?lang=en)
- [**](https://ca.linkedin.com/company/incycle-software)
- [**](https://www.facebook.com/InCycleSoftware/)

### About us

At InCycle, we believe there is always a better way and today, that includes the cloud.

[![InCycle Microsoft Partner](https://blogs.incyclesoftware.com/hs-fs/hubfs/Incycle%202017%20website%20resources/logo-InCycle-New-white.png?width=200&name=logo-InCycle-New-white.png "InCycle Microsoft Partner")](https://www.incyclesoftware.com/)

### Learn more

- [Why Incycle?](https://www.incyclesoftware.com/why-incycle)
- [Success Stories](https://www.incyclesoftware.com/customer-success-stories)
- [Events](https://www.incyclesoftware.com/events)
- [Careers](https://www.incyclesoftware.com/careers)
- [About](https://www.incyclesoftware.com/about-incycle-software)

 

### 1-800-565-0510 [info@incyclesoftware.com](mailto:info@incyclesoftware.com) 

### ![Microsoft GitHub Verified Partner](https://blogs.incyclesoftware.com/hs-fs/hubfs/GitHub%20Verified%20Partner%20-%20white-SQUARE.png?width=256&height=57&name=GitHub%20Verified%20Partner%20-%20white-SQUARE.png) ![Data & AI Solutions Partner](https://blogs.incyclesoftware.com/hs-fs/hubfs/Data%20%26%20AI%20Solutions%20Partner.png?width=125&height=144&name=Data%20%26%20AI%20Solutions%20Partner.png) ![Digital & App Innovation Solutions Partner](https://blogs.incyclesoftware.com/hs-fs/hubfs/Digital%20%26%20App%20Innovation%20Solutions%20Partner.png?width=125&height=144&name=Digital%20%26%20App%20Innovation%20Solutions%20Partner.png)

 

© 2025 InCycle Software

[Privacy policy](https://www.incyclesoftware.com/privacy)

**

![](https://px.ads.linkedin.com/collect/?pid=302756&fmt=gif) ![](https://px.ads.linkedin.com/collect/?pid=302756&fmt=gif)

```json
{
  "@context" : "https://schema.org",
  "@type" : "BlogPosting",
  "author" : {
    "@type" : "Person",
    "name" : "Leo Vildosola",
    "url" : "https://blogs.incyclesoftware.com/author/leo-vildosola"
  },
  "dateModified" : "2021-03-29T17:01:11.682Z",
  "datePublished" : "2012-07-05T23:20:17.000Z",
  "headline" : "PowerShell script to get list of modified files from a Bug / PBI in TFS across changesets",
  "mainEntityOfPage" : {
    "@id" : "https://blogs.incyclesoftware.com/2012/07/powershell-script-to-get-list-of-modified-files-from-a-bug-pbi-in-tfs-across-changesets/",
    "@type" : "WebPage"
  },
  "publisher" : {
    "@type" : "Organization",
    "logo" : {
      "@type" : "ImageObject",
      "url" : "https://blogs.incyclesoftware.com/hubfs/logo-InCycle-New-Blue---transparent.png"
    },
    "name" : "InCycle Software Inc."
  }
}
```