2011-11-01 71 views
4

我從How to add Windows group as "Readers" to all projects in TFS 2010 collection?的答案中看到,必須手動完成所有現有項目。如何向所有用戶授予對所有TFS團隊項目的只讀訪問權限?

是否有可用於執行此操作的命令行工具?我知道TfsSecurity計劃,但是我嘗試爲單個團隊項目執行此操作無效。


我所做的單個團隊項目:

  1. 我創建「[DefaultCollection] \所有項目只讀用戶」包含一個單一的Active Directory組作爲收藏級組作爲會員。
  2. 我再嘗試讀取權限添加到項目該組:

tfssecurity /收藏:http://tfs:8080/tfs/defaultcollection/A +項目vstfs:///分類/ TeamProject/GUID GENERIC_READ「[DefaultCollection] \所有項目只讀用戶「允許

這確實將該組的ACL添加到Team Project,但該組未出現在Team Project的安全對話框中。

我想要做的是給這個團隊與團隊項目的「讀者」組相同的訪問權限。

+0

你有沒有考慮在PowerShell腳本? http://blog.myrobertson.com/2011/05/tfs-automation-with-powershell-part-1.html –

回答

8

下面是一個powershell腳本,用於遍歷集合中的每個團隊項目,獲取Readers組並添加一個SID。

# load the required dll 
[void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.TeamFoundation.Client") 

function get-tfs 
{ 
    param(
    [string] $serverName = $(throw 'serverName is required') 
    ) 

    $propertiesToAdd = (
     ('VCS', 'Microsoft.TeamFoundation.VersionControl.Client', 'Microsoft.TeamFoundation.VersionControl.Client.VersionControlServer'), 
     ('WIT', 'Microsoft.TeamFoundation.WorkItemTracking.Client', 'Microsoft.TeamFoundation.WorkItemTracking.Client.WorkItemStore'), 
     ('CSS', 'Microsoft.TeamFoundation', 'Microsoft.TeamFoundation.Server.ICommonStructureService'), 
     ('GSS', 'Microsoft.TeamFoundation', 'Microsoft.TeamFoundation.Server.IGroupSecurityService') 
    ) 

    [psobject] $tfs = [Microsoft.TeamFoundation.Client.TeamFoundationServerFactory]::GetServer($serverName) 
    foreach ($entry in $propertiesToAdd) { 
     $scriptBlock = ' 
      [System.Reflection.Assembly]::LoadWithPartialName("{0}") > $null 
      $this.GetService([{1}]) 
     ' -f $entry[1],$entry[2] 
     $tfs | add-member scriptproperty $entry[0] $ExecutionContext.InvokeCommand.NewScriptBlock($scriptBlock) 
    } 
    return $tfs 
} 
#set the TFS server url 
[psobject] $tfs = get-tfs -serverName http://YourTfsServer:8080/tfs/YourColleciton 


$items = $tfs.vcs.GetAllTeamProjects('True') 
    $items | foreach-object -process { 
    $proj = $_ 
    $readers = $tfs.GSS.ListApplicationGroups($proj.Name) | ?{$_.DisplayName -eq 'Readers' } 

    $tfs.GSS.AddMemberToApplicationGroup($readers.Sid, 'TheSidToTheGroupYouWantToAdd') 
} 
+0

Powershell noob在這裏,我該如何執行此操作?我知道我需要插入我的TFS網址,用戶的SID ......其他任何東西?需要多長時間才能運行? Powershell命令行將顯示哪些結果? – Ben

4

我的做法是基於TFS權限繼承,除非明確地否認了這一事實。

要創建將自動與只讀權限給所有存在的項目,以及期貨的人訪問用戶組,請按照這些步驟:

  1. 在項目集合級別創建一個新的安全組。您可以使用「團隊/團隊項目集合設置/組成員身份」菜單在Visual Studio中執行此操作。

  2. 添加新組作爲「Project Collection管理員」組的成員。這將允許訪問集合中的所有項目,包括期貨項目。

  3. 限制新組的權限以刪除繼承的管理員權限。要強制只讀訪問,請拒絕除「創建工作區」,「查看構建資源」和「查看集合級別信息」之外的所有操作。

該組的用戶將擁有對集合中所有項目的源代碼,工作項目和構建定義的讀取權限。

+0

我剛試過這個,但無法讓它爲我工作。不知道我做錯了什麼。 – Peter

+0

@Peter我剛剛在TFS 2017上試了一下,它很有用。在不知道你嘗試過什麼的情況下,我無法告訴你它爲什麼不起作用。按照步驟密切?有趣的是,已經有一個具有「只讀」訪問權限的組(有效用戶),但該組本身是「只讀」的。通過執行這些步驟,您基本上可以創建一個可修改的「有效用戶」組。 – Shaamaan

相關問題