среда, 25 июня 2014 г.

Синхронизация доменной группы с группой TFS


Скрипт, который позволяет синхронизировать доменную группу или группу рассылки с TFS-группой.

Этот скрипт полезен для сценария, когда у вас есть группа рассылки Active Directory, для которой необходимо настроить права доступа в TFS. На TFS нет возможности настройки прав для группы рассылки, поэтому я использую этот скрипт для синхронизации всех учёток из группы рассылки с группой TFS, у которой уже есть необходимые права доступа.

Сценарий.
В моём сценарии группа "TFSUsers" это группа рассылки Active Directory, для участников которой требуется настроть доступ в TFS, а именно, дать им разрешения TFS-группы "Collection Readers". Для этой группы рассылки владельцем назначен руководитель отдела разработки, который может легко менять состав  группы через Outlook. Это является ключевым преимуществом перед группой безопасности (security group) Active Directory, т.к. в группе безопасности чтобы дать права на управление составом, необходимо запрашивать доступ у системных администраторов домена, к тому же руководителю отдела разработки придётся ставить у себя на рабочем ПК консоль Active Directory.
Скрипт создаёт в TFS группу "Users", в которую добавляет всех участников группы рассылки Active Directory - "TFSUsers". После этого в TFS добавляет группу "Users" в группу "Collection Readers" у которой уже есть необходимые права доступа. Этот скрипт можно запускать по расписанию, чтобы синхронизация групп была в актуальном состоянии.


      cls

      # Url TFS-коллекции
      $col='http://tfs:8080/tfs/Collection' 

      $adgroup='TFSUsers' 
      $group = "Users"

      .\TFSSecurity /gd $group /collection:$col  #удалить группу
      .\TFSSecurity /gcg $group /collection:$col #создать группу
      .\TFSSecurity /collection:$col /g+ "Collection Readers" n:$group /collection:$col #добавить группу в существующую TFS-группу



      Import-Module ActiveDirectory
      $users=GET-ADGROUPMEMBER $adgroup -recursive | SELECT-OBJECT SamAccountName


      foreach ($p in $users)
      {
          $user=$p.SamAccountName    
          .\TFSSecurity /collection:$col /g+ $group n:$user /collection:$col
      }