简体   繁体   中英

Open VSTFS Link in Visual Studio by PowerShell Script

I try to open a detail page of a successfull build in VisualStudio by a PowerShell script. I am able to connect to the collection of my test project and a certain Builddefinition. I got a vstfs-Link for every build but how can I open this link in Visual Studio? I tried to use EncodeUri, GetArtifactUrl and GetArtifactUrlExternal. For GetArtifactUrl I got this error:

Cannot convert argument "artId", with value: "vstfs:///Build/Build/12345", for "GetArtifactUrl" to type "Microsoft.TeamFoundation.ArtifactId": "Cannot convert the "vstfs:///Build/Build/12345" value of type "System.Uri" to type "Microsoft.TeamFoundation.ArtifactId"."

Can anyone give me some advice how to convert a vstfs link to something that I can open in VisualStudio?

Thanks

[void] [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.TeamFoundation.Client")
[void] [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.TeamFoundation.Build.Client")
[void] [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.TeamFoundation.VersionControl.Client")
[void] [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.TeamFoundation.Common")
[void] [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.VisualStudio.TeamFoundation")
[void] [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.VisualStudio.TeamFoundation.Client")
[void] [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.VisualStudio.TeamFoundation.VersionControl")

$uri = [URI]"http://MyServer:8080/tfs/DefaultCollection"
$project = "MyProject"
$buildDefinition = "MyBuildDefinition"

# CONNECT
$collection = [Microsoft.TeamFoundation.Client.TfsTeamProjectCollectionFactory]::GetTeamProjectCollection($uri)

# BUILDS
$buildServer = $collection.GetService([Microsoft.TeamFoundation.Build.Client.IBuildServer])
$buildSpec = $buildServer.CreateBuildDetailSpec($project, $buildDefinition)

$ILinkingService = $collection.GetService([Microsoft.Teamfoundation.ILinking])
$CommonService = $collection.GetService([Microsoft.TeamFoundation.Common])

# QUERY
$buildSpec.InformationTypes = $null
$buildSpec.MaxBuildsPerDefinition = 5
$buildSpec.QueryOrder = [Microsoft.TeamFoundation.Build.Client.BuildQueryOrder]::FinishTimeDescending
$results = $buildServer.QueryBuilds($buildSpec)

foreach($build in $results.Builds)
{
    Write-Host $build.Status
    #$testUrl = $ILinkingService.GetArtifactUrl($build.Uri)
    $testUrl = $CommonService.EncodeUri($build.Uri)
    Write-Host $testUrl
}

First of all, to open build details in Visual Studio, you can just use $build.Uri in connection with url param:

$testUrl = $build.Uri.AbsoluteUri + "?url=" + $uri.AbsoluteUri


If you want to open the build details in a browser, you can use ILinking.GetArtifactUrl , but must specify the overload explicitly:

$testUrl = $ILinkingService.GetArtifactUrl( [string] $build.Uri)

Perhaps even better is to use TswaClientHyperlinkService :

$waLinkingService = $collection.GetService([Microsoft.TeamFoundation.Client.TswaClientHyperlinkService])
...
$waLinkingService.GetViewBuildDetailsUrl($build.Uri)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM