<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:georss="http://www.georss.org/georss" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0">
  <channel>
    <title>Static Void - TFS</title>
    <link>http://martinwilley.com/blog/</link>
    <description>What next?</description>
    <language>en-us</language>
    <copyright>Martin Willey</copyright>
    <lastBuildDate>Fri, 30 Nov 2012 17:07:20 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 2.3.9074.18820</generator>
    <managingEditor>me@martinwilley.com</managingEditor>
    <webMaster>me@martinwilley.com</webMaster>
    <item>
      <trackback:ping>http://martinwilley.com/blog/Trackback.aspx?guid=8328acda-f445-47c5-9746-53010e1169d5</trackback:ping>
      <pingback:server>http://martinwilley.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://martinwilley.com/blog/PermaLink,guid,8328acda-f445-47c5-9746-53010e1169d5.aspx</pingback:target>
      <dc:creator>Martin</dc:creator>
      <wfw:comment>http://martinwilley.com/blog/CommentView,guid,8328acda-f445-47c5-9746-53010e1169d5.aspx</wfw:comment>
      <wfw:commentRss>http://martinwilley.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=8328acda-f445-47c5-9746-53010e1169d5</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
At work I can happily connect to my Azure-hosted Team Foundation Service. But I couldn't
do it from home. It says it is looking up identity providers, but the live.com logon
screen never shows up. I just see the dreaded TFS31003 error ("<em>Either you have
not entered the necessary credentials or your user account does not have permission
to connect to Team Foundation Server </em>").
</p>
        <p>
My home machines are Windows 8 and linked to my personal LiveIDs, not my work logon.
Windows 8 likes to connect to lots of Skydrive and lots of other services, storing
all those credentials. And Visual Studio picks those rather than allow me to add a
new one. Deleting entries in the Windows credentials store didn't work.
</p>
        <p>
How can I force Visual Studio to select the right logon?
</p>
        <p>
In Visual Studio, View&gt;Other Windows&gt;Web Browser
</p>
        <p>
In the browser, go to live.com, and log on. 
</p>
        <p>
On mine it automatically logged on with another of my logons, so I signed off, and
then signed back in with the correct one.
</p>
        <p>
Now when I tried to connect to the TFS service address, it works. 
</p>
        <img width="0" height="0" src="http://martinwilley.com/blog/aggbug.ashx?id=8328acda-f445-47c5-9746-53010e1169d5" />
      </body>
      <title>TF31003: Windows 8 vs Team Foundation Service</title>
      <guid isPermaLink="false">http://martinwilley.com/blog/PermaLink,guid,8328acda-f445-47c5-9746-53010e1169d5.aspx</guid>
      <link>http://martinwilley.com/blog/2012/11/30/TF31003Windows8VsTeamFoundationService.aspx</link>
      <pubDate>Fri, 30 Nov 2012 17:07:20 GMT</pubDate>
      <description>&lt;p&gt;
At work I can happily connect to my Azure-hosted Team Foundation Service. But I couldn't
do it from home. It says it is looking up identity providers, but the live.com logon
screen never shows up. I just see the dreaded TFS31003 error ("&lt;em&gt;Either you have
not entered the necessary credentials or your user account does not have permission
to connect to Team Foundation Server &lt;/em&gt;").
&lt;/p&gt;
&lt;p&gt;
My home machines are Windows 8 and linked to my personal LiveIDs, not my work logon.
Windows 8 likes to connect to lots of Skydrive and lots of other services, storing
all those credentials. And Visual Studio picks those rather than allow me to add a
new one. Deleting entries in the Windows credentials store didn't work.
&lt;/p&gt;
&lt;p&gt;
How can I force Visual Studio to select the right logon?
&lt;/p&gt;
&lt;p&gt;
In Visual Studio, View&amp;gt;Other Windows&amp;gt;Web Browser
&lt;/p&gt;
&lt;p&gt;
In the browser, go to live.com, and log on. 
&lt;/p&gt;
&lt;p&gt;
On mine it automatically logged on with another of my logons, so I signed off, and
then signed back in with the correct one.
&lt;/p&gt;
&lt;p&gt;
Now when I tried to connect to the TFS service address, it works. 
&lt;/p&gt;
&lt;img width="0" height="0" src="http://martinwilley.com/blog/aggbug.ashx?id=8328acda-f445-47c5-9746-53010e1169d5" /&gt;</description>
      <comments>http://martinwilley.com/blog/CommentView,guid,8328acda-f445-47c5-9746-53010e1169d5.aspx</comments>
      <category>TFS</category>
      <category>VS2012</category>
    </item>
    <item>
      <trackback:ping>http://martinwilley.com/blog/Trackback.aspx?guid=70a11d6b-a7dd-47dd-803d-9c545b2adfeb</trackback:ping>
      <pingback:server>http://martinwilley.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://martinwilley.com/blog/PermaLink,guid,70a11d6b-a7dd-47dd-803d-9c545b2adfeb.aspx</pingback:target>
      <dc:creator>Martin</dc:creator>
      <georss:point>0 0</georss:point>
      <wfw:comment>http://martinwilley.com/blog/CommentView,guid,70a11d6b-a7dd-47dd-803d-9c545b2adfeb.aspx</wfw:comment>
      <wfw:commentRss>http://martinwilley.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=70a11d6b-a7dd-47dd-803d-9c545b2adfeb</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <pre style="font-family:Consolas;color:black;background:white;">
          <span style="color:green;">
          </span>
          <span style="color:green;">//find the working folder for each TFS</span>
          <span style="color:blue;">var</span> projectCollections = <span style="color:#2b91af;">RegisteredTfsConnections</span>.GetProjectCollections(); <span style="color:blue;">foreach</span> (<span style="color:blue;">var</span> registeredProjectCollection <span style="color:blue;">in</span> projectCollections)
{     <span style="color:#2b91af;">Console</span>.WriteLine(<span style="color:#a31515;">"Project collection: </span><span style="color:mediumseagreen;">{0}</span><span style="color:#a31515;"> </span><span style="color:mediumseagreen;">{1}</span><span style="color:#a31515;">"</span>, 
<br />
registeredProjectCollection.Name, 
<br />
registeredProjectCollection.Uri.AbsoluteUri);     <span style="color:blue;">var</span> projectCollection =
        <span style="color:#2b91af;">TfsTeamProjectCollectionFactory</span>.GetTeamProjectCollection(registeredProjectCollection);
    <span style="color:blue;">var</span> versionControl = projectCollection.GetService&lt;<span style="color:#2b91af;">VersionControlServer</span>&gt;();
    <span style="color:green;">// get workspace</span>     <span style="color:blue;">var</span> workspace =
        versionControl.QueryWorkspaces(<span style="color:blue;">null</span>,
                System.Threading.<span style="color:#2b91af;">Thread</span>.CurrentPrincipal.Identity.Name,
                <span style="color:#2b91af;">Environment</span>.MachineName)
                .FirstOrDefault(x =&gt; 
                    x.Folders.Length &gt; 0 &amp;&amp;
                    <span style="color:green;">//if there is a Work Item Manager, we don't care</span>                     x.Name != <span style="color:#a31515;">"WIM ("</span> + <span style="color:#2b91af;">Environment</span>.MachineName + <span style="color:#a31515;">")"</span>);
    <span style="color:blue;">if</span>(workspace == <span style="color:blue;">null</span>) <span style="color:blue;">continue</span>; <span style="color:green;">//no workspace for this server</span>     <span style="color:green;">//there's normally only one</span>     <span style="color:#2b91af;">WorkingFolder</span> folder = workspace.Folders.First();
    <span style="color:#2b91af;">Console</span>.WriteLine(<span style="color:#a31515;">"Working folder </span><span style="color:mediumseagreen;">{0}</span><span style="color:#a31515;">"</span>, folder.LocalItem);
}<br /><br /><span style="color:green;">//old VS 2008 way</span><span style="color:green;">//using (TeamFoundationServer tfsServer = new TeamFoundationServer(tfsServerName))</span><span style="color:green;">//{</span><span style="color:green;">//    // Get a reference to version control</span><span style="color:green;">//    VersionControlServer versionControl =</span><span style="color:green;">//        (VersionControlServer) tfsServer.GetService(typeof (VersionControlServer));</span><span style="color:green;">//    //....</span><span style="color:green;">//}</span><br /></pre>
        <img width="0" height="0" src="http://martinwilley.com/blog/aggbug.ashx?id=70a11d6b-a7dd-47dd-803d-9c545b2adfeb" />
      </body>
      <title>Visual Studio 2010 - find TFS working directory</title>
      <guid isPermaLink="false">http://martinwilley.com/blog/PermaLink,guid,70a11d6b-a7dd-47dd-803d-9c545b2adfeb.aspx</guid>
      <link>http://martinwilley.com/blog/2012/01/05/VisualStudio2010FindTFSWorkingDirectory.aspx</link>
      <pubDate>Thu, 05 Jan 2012 08:51:17 GMT</pubDate>
      <description>&lt;pre style="font-family:Consolas;color:black;background:white;"&gt;&lt;span style="color:green;"&gt;&lt;/span&gt; &lt;span style="color:green;"&gt;//find&amp;nbsp;the&amp;nbsp;working&amp;nbsp;folder&amp;nbsp;for&amp;nbsp;each&amp;nbsp;TFS&lt;/span&gt; &lt;span style="color:blue;"&gt;var&lt;/span&gt;&amp;nbsp;projectCollections&amp;nbsp;=&amp;nbsp;&lt;span style="color:#2b91af;"&gt;RegisteredTfsConnections&lt;/span&gt;.GetProjectCollections(); &lt;span style="color:blue;"&gt;foreach&lt;/span&gt;&amp;nbsp;(&lt;span style="color:blue;"&gt;var&lt;/span&gt;&amp;nbsp;registeredProjectCollection&amp;nbsp;&lt;span style="color:blue;"&gt;in&lt;/span&gt;&amp;nbsp;projectCollections)
{ &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#2b91af;"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color:#a31515;"&gt;"Project&amp;nbsp;collection:&amp;nbsp;&lt;/span&gt;&lt;span style="color:mediumseagreen;"&gt;{0}&lt;/span&gt;&lt;span style="color:#a31515;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color:mediumseagreen;"&gt;{1}&lt;/span&gt;&lt;span style="color:#a31515;"&gt;"&lt;/span&gt;, 
&lt;br&gt;
registeredProjectCollection.Name, 
&lt;br&gt;
registeredProjectCollection.Uri.AbsoluteUri); &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;var&lt;/span&gt;&amp;nbsp;projectCollection&amp;nbsp;=
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#2b91af;"&gt;TfsTeamProjectCollectionFactory&lt;/span&gt;.GetTeamProjectCollection(registeredProjectCollection);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;var&lt;/span&gt;&amp;nbsp;versionControl&amp;nbsp;=&amp;nbsp;projectCollection.GetService&amp;lt;&lt;span style="color:#2b91af;"&gt;VersionControlServer&lt;/span&gt;&amp;gt;();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:green;"&gt;//&amp;nbsp;get&amp;nbsp;workspace&lt;/span&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;var&lt;/span&gt;&amp;nbsp;workspace&amp;nbsp;=
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;versionControl.QueryWorkspaces(&lt;span style="color:blue;"&gt;null&lt;/span&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;System.Threading.&lt;span style="color:#2b91af;"&gt;Thread&lt;/span&gt;.CurrentPrincipal.Identity.Name,
&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;span style="color:#2b91af;"&gt;Environment&lt;/span&gt;.MachineName)
&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;.FirstOrDefault(x&amp;nbsp;=&amp;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;x.Folders.Length&amp;nbsp;&amp;gt;&amp;nbsp;0&amp;nbsp;&amp;amp;&amp;amp;
&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;span style="color:green;"&gt;//if&amp;nbsp;there&amp;nbsp;is&amp;nbsp;a&amp;nbsp;Work&amp;nbsp;Item&amp;nbsp;Manager,&amp;nbsp;we&amp;nbsp;don't&amp;nbsp;care&lt;/span&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;x.Name&amp;nbsp;!=&amp;nbsp;&lt;span style="color:#a31515;"&gt;"WIM&amp;nbsp;("&lt;/span&gt;&amp;nbsp;+&amp;nbsp;&lt;span style="color:#2b91af;"&gt;Environment&lt;/span&gt;.MachineName&amp;nbsp;+&amp;nbsp;&lt;span style="color:#a31515;"&gt;")"&lt;/span&gt;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;if&lt;/span&gt;(workspace&amp;nbsp;==&amp;nbsp;&lt;span style="color:blue;"&gt;null&lt;/span&gt;)&amp;nbsp;&lt;span style="color:blue;"&gt;continue&lt;/span&gt;;&amp;nbsp;&lt;span style="color:green;"&gt;//no&amp;nbsp;workspace&amp;nbsp;for&amp;nbsp;this&amp;nbsp;server&lt;/span&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:green;"&gt;//there's&amp;nbsp;normally&amp;nbsp;only&amp;nbsp;one&lt;/span&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#2b91af;"&gt;WorkingFolder&lt;/span&gt;&amp;nbsp;folder&amp;nbsp;=&amp;nbsp;workspace.Folders.First();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#2b91af;"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color:#a31515;"&gt;"Working&amp;nbsp;folder&amp;nbsp;&lt;/span&gt;&lt;span style="color:mediumseagreen;"&gt;{0}&lt;/span&gt;&lt;span style="color:#a31515;"&gt;"&lt;/span&gt;,&amp;nbsp;folder.LocalItem);
}&lt;br&gt;
&lt;br&gt;
&lt;span style="color:green;"&gt;//old&amp;nbsp;VS&amp;nbsp;2008&amp;nbsp;way&lt;/span&gt; &lt;span style="color:green;"&gt;//using&amp;nbsp;(TeamFoundationServer&amp;nbsp;tfsServer&amp;nbsp;=&amp;nbsp;new&amp;nbsp;TeamFoundationServer(tfsServerName))&lt;/span&gt; &lt;span style="color:green;"&gt;//{&lt;/span&gt; &lt;span style="color:green;"&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;Get&amp;nbsp;a&amp;nbsp;reference&amp;nbsp;to&amp;nbsp;version&amp;nbsp;control&lt;/span&gt; &lt;span style="color:green;"&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;VersionControlServer&amp;nbsp;versionControl&amp;nbsp;=&lt;/span&gt; &lt;span style="color:green;"&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(VersionControlServer)&amp;nbsp;tfsServer.GetService(typeof&amp;nbsp;(VersionControlServer));&lt;/span&gt; &lt;span style="color:green;"&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//....&lt;/span&gt; &lt;span style="color:green;"&gt;//}&lt;/span&gt; 
&lt;br&gt;
&lt;/pre&gt;&lt;img width="0" height="0" src="http://martinwilley.com/blog/aggbug.ashx?id=70a11d6b-a7dd-47dd-803d-9c545b2adfeb" /&gt;</description>
      <comments>http://martinwilley.com/blog/CommentView,guid,70a11d6b-a7dd-47dd-803d-9c545b2adfeb.aspx</comments>
      <category>TFS</category>
      <category>VS2010</category>
    </item>
    <item>
      <trackback:ping>http://martinwilley.com/blog/Trackback.aspx?guid=a4a357a9-a980-4d00-9a2f-73f0b8d4d169</trackback:ping>
      <pingback:server>http://martinwilley.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://martinwilley.com/blog/PermaLink,guid,a4a357a9-a980-4d00-9a2f-73f0b8d4d169.aspx</pingback:target>
      <dc:creator>Martin</dc:creator>
      <georss:point>0 0</georss:point>
      <wfw:comment>http://martinwilley.com/blog/CommentView,guid,a4a357a9-a980-4d00-9a2f-73f0b8d4d169.aspx</wfw:comment>
      <wfw:commentRss>http://martinwilley.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=a4a357a9-a980-4d00-9a2f-73f0b8d4d169</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">Finding out all users on Team Foundation
Server turns out to be pretty easy.<br />
I found the answer at <a href="http://blogs.msdn.com/b/jmanning/archive/2006/05/02/588648.aspx">http://blogs.msdn.com/b/jmanning/archive/2006/05/02/588648.aspx</a><br /><br />
You need a reference to C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\PrivateAssemblies\Microsoft.TeamFoundation.dll
plus the Microsoft.TeamFoundation.Client.dll and Microsoft.TeamFoundation.Common.dll<br /><br />
var server = new TeamFoundationServer(tfsUrl);<br />
var groupSecurityService = 
<br />
    (IGroupSecurityService)server.GetService(typeof(IGroupSecurityService));<br /><br />
var validUserSid = 
<br />
    groupSecurityService.ReadIdentity(<br />
        SearchFactor.AccountName, 
<br />
        @"[Server]\Team Foundation Valid Users", 
<br />
        QueryMembership.Expanded);<br /><br />
Identity[] identities = 
<br />
    groupSecurityService.ReadIdentities(<br />
        SearchFactor.Sid, 
<br />
        validUserSid.Members, 
<br />
        QueryMembership.None);<br /><br />
//exclude Administrators and system accounts<br />
foreach (Identity id in identities.Where(x=&gt;<br />
    x.Type == IdentityType.WindowsUser &amp;&amp;<br />
    x.Deleted == false &amp;&amp;<br />
    !x.Description.StartsWith("Built-in account", StringComparison.OrdinalIgnoreCase)
&amp;&amp;<br />
    !string.IsNullOrEmpty(x.MailAddress) &amp;&amp;<br />
    !x.AccountName.StartsWith("sys_", StringComparison.OrdinalIgnoreCase)))<br />
{<br />
        Debug.WriteLine(id.AccountName + " " + id.DisplayName);<br />
}<br /><br /><br /><p></p><img width="0" height="0" src="http://martinwilley.com/blog/aggbug.ashx?id=a4a357a9-a980-4d00-9a2f-73f0b8d4d169" /></body>
      <title>Finding all TFS users</title>
      <guid isPermaLink="false">http://martinwilley.com/blog/PermaLink,guid,a4a357a9-a980-4d00-9a2f-73f0b8d4d169.aspx</guid>
      <link>http://martinwilley.com/blog/2010/09/20/FindingAllTFSUsers.aspx</link>
      <pubDate>Mon, 20 Sep 2010 13:51:34 GMT</pubDate>
      <description>Finding out all users on Team Foundation Server turns out to be pretty easy.&lt;br&gt;
I found the answer at &lt;a href="http://blogs.msdn.com/b/jmanning/archive/2006/05/02/588648.aspx"&gt;http://blogs.msdn.com/b/jmanning/archive/2006/05/02/588648.aspx&lt;/a&gt;
&lt;br&gt;
&lt;br&gt;
You need a reference to C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\PrivateAssemblies\Microsoft.TeamFoundation.dll
plus the Microsoft.TeamFoundation.Client.dll and Microsoft.TeamFoundation.Common.dll&lt;br&gt;
&lt;br&gt;
var server = new TeamFoundationServer(tfsUrl);&lt;br&gt;
var groupSecurityService = 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; (IGroupSecurityService)server.GetService(typeof(IGroupSecurityService));&lt;br&gt;
&lt;br&gt;
var validUserSid = 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; groupSecurityService.ReadIdentity(&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; SearchFactor.AccountName, 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; @"[Server]\Team Foundation Valid Users", 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; QueryMembership.Expanded);&lt;br&gt;
&lt;br&gt;
Identity[] identities = 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; groupSecurityService.ReadIdentities(&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; SearchFactor.Sid, 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; validUserSid.Members, 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; QueryMembership.None);&lt;br&gt;
&lt;br&gt;
//exclude Administrators and system accounts&lt;br&gt;
foreach (Identity id in identities.Where(x=&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; x.Type == IdentityType.WindowsUser &amp;amp;&amp;amp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; x.Deleted == false &amp;amp;&amp;amp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; !x.Description.StartsWith("Built-in account", StringComparison.OrdinalIgnoreCase)
&amp;amp;&amp;amp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; !string.IsNullOrEmpty(x.MailAddress) &amp;amp;&amp;amp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; !x.AccountName.StartsWith("sys_", StringComparison.OrdinalIgnoreCase)))&lt;br&gt;
{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Debug.WriteLine(id.AccountName + " " + id.DisplayName);&lt;br&gt;
}&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://martinwilley.com/blog/aggbug.ashx?id=a4a357a9-a980-4d00-9a2f-73f0b8d4d169" /&gt;</description>
      <comments>http://martinwilley.com/blog/CommentView,guid,a4a357a9-a980-4d00-9a2f-73f0b8d4d169.aspx</comments>
      <category>TFS</category>
    </item>
  </channel>
</rss>