Скрипт PowerShell для получения коллекций TFS / списка проектов - PullRequest
2 голосов
/ 17 апреля 2019

Я использую сценарий PowerShell для загрузки списка проектов и коллекций с моего сервера TFS.Ниже приведен мой сценарий:

$uri = "http://xxxserver/tfs"
$tfsConfigurationServer = [Microsoft.TeamFoundation.Client.TfsConfigurationServerFactory]::GetConfigurationServer($uri)
$tpcService = $tfsConfigurationServer.GetService("Microsoft.TeamFoundation.Framework.Client.ITeamProjectCollectionService")

$sortedCollections = $tpcService.GetCollections() | Sort-Object -Property Name
$numberOfProjects = 0

foreach($collection in $sortedCollections) {
    $collectionUri = $uri + "/" + $collection.Name
    $tfsTeamProject = [Microsoft.TeamFoundation.Client.TfsTeamProjectCollectionFactory]::GetTeamProjectCollection($collectionUri)
    $cssService = $tfsTeamProject.GetService("Microsoft.TeamFoundation.Server.ICommonStructureService3")   
    $sortedProjects = $cssService.ListProjects() | Sort-Object -Property Name

    Write-Host $collection.Name "- contains" $sortedProjects.Count "project(s)

После выполнения этого сценария у меня появляется следующая ошибка:

Unable to find type [Microsoft.TeamFoundation.Client.TfsConfigurationServerFactory]: make sure that the assembly
containing this type is loaded.
At $\getProjList.ps1:2 char:1
+ $tfsConfigurationServer = [Microsoft.TeamFoundation.Client.TfsConfigurationServe ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (Microsoft.TeamF...onServerFactory:TypeName) [], RuntimeException
    + FullyQualifiedErrorId : TypeNotFound

You cannot call a method on a null-valued expression.
At $\getProjList.ps1:3 char:1
+ $tpcService = $tfsConfigurationServer.GetService("Microsoft.TeamFoundation.Frame ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull

You cannot call a method on a null-valued expression.
At $\getProjList.ps1:5 char:1
+ $sortedCollections = $tpcService.GetCollections() | Sort-Object -Property Name
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull

Как можно устранить эту ошибку?

Ответы [ 2 ]

4 голосов
/ 18 апреля 2019

Вы можете достичь цели с помощью TFS Rest API:

$url = "http://tfs-server:8080/tfs"
$collections = Invoke-RestMethod -Uri "$url/_api/_common/GetJumpList?__v=5&navigationContextPackage={}&showStoppedCollections=false" -Method Get -UseDefaultCredentials -ContentType application/json
$collections.__wrappedArray.ForEach({
  $projects = Invoke-RestMethod -Uri "$url/$($_.name)/_apis/projects" -Method Get -UseDefaultCredentials -ContentType application/json    
  Write-Host Projects for collection $_.name
  Write-Host $projects.value.name
})

Теперь у вас есть каждый проект в каждой коллекции, и вы можете сортировать и искать.

1 голос
/ 17 апреля 2019

Кажется, что PowerShell не может найти тип Microsoft.TeamFoundation.Client.TfsConfigurationServerFactory . Вам, вероятно, просто нужно использовать следующую команду. Который добавляет тип (класс) Microsoft .NET Framework к сеансу Windows PowerShell.

Возможно, вам удастся использовать только следующую команду:

Add-Type -AssemblyName "Microsoft.TeamFoundation.Client"

Если это не сработает, используйте следующие команды:

Add-Type -AssemblyName "Microsoft.TeamFoundation.Client.TfsConfigurationServerFactory" -UsingNamespace "Microsoft.TeamFoundation.Client"

Вам также, вероятно, понадобится выполнить приведенную ниже команду, чтобы ваш полный скрипт работал.

Add-Type -AssemblyName "Microsoft.TeamFoundation.Client.TfsTeamProjectCollectionFactory" -UsingNamespace "Microsoft.TeamFoundation.Client"
...