TFS 2015 api使用PowerShell从池中删除代理

我正在努力暂时从池中删除代理,在代理所在的构建服务器上安装新软件,测试它是否有效,然后再将代理添加到池中。 我想以编程方式执行此操作,无论是使用PowerShell还是不可能,然后使用C#执行此操作。

问题是我找不到任何可以帮助我这样做的文档,无论是通过TFS rest api还是通过visual studio附带的工具。

所以我特别要问的是:如何从构建池中删除命名代理,以及如何将命名代理添加回构建池。

我基本上想要的是进入TFS的Web管理和取消选中/检查池上的代理的相同function。

编辑 – >

当我尝试使用starain-msft提供的信息启用/禁用代理时,我收到以下错误:Invoke-RestMethod:404 – 找不到文件或目录。 服务器错误

编辑 – >

删除了大部分错误,因为我发现该问题存在于我的公司代理中请阅读: https : //www.visualstudio.com/en-us/docs/integrate/get-started/rest/basics#http-method-覆盖

但是我在starain-msft的帮助下得到了它。

最终解决方案如下所示:

Function TFSwebRequest{ param ( [ValidateNotNullOrEmpty()] [Parameter(Mandatory=$true)] [string] $Uri, [ValidateNotNullOrEmpty()] [Parameter(Mandatory=$true)] [string] $Method, [ValidateNotNullOrEmpty()] [string] $ContentType, [ValidateNotNullOrEmpty()] [string] $ContentBody, [ValidateNotNullOrEmpty()] [System.Net.WebHeaderCollection] $Headers ) # Creating Webrequest from Uri $webRequest = [System.Net.HttpWebRequest]::CreateHttp($Uri) $webRequest.UseDefaultCredentials = $true $webRequest.Method = $Method if($Headers.Count -ne 0){ $webRequest.Headers = $Headers } if(![string]::IsNullOrEmpty($ContentType)){ $webRequest.ContentType = $ContentType } if(![string]::IsNullOrEmpty($ContentBody)){ $Body = [byte[]][char[]]$ContentBody $Stream = $webRequest.GetRequestStream(); $Stream.Write($Body, 0, $Body.Length); } # Get webresponse to variable try{ [System.Net.WebResponse]$webResponse = $webRequest.GetResponse() } catch{ $ErrorMessage = $_.Exception.Message Write-Host "TFSwebRequest Failed = " $ErrorMessage -ForegroundColor Red } # Stream webresponse to string $webResponseStream = $webResponse.GetResponseStream() $streamReader = New-Object System.IO.StreamReader $webResponseStream $result = $streamReader.ReadToEnd() | ConvertFrom-Json return ,$result } $agentUri = "http://teamfoundation:8080/tfs/Main/_apis/distributedtask/pools/$($poolID)/agents/$($agentID)?api-version=2.3-preview.1" $contentBody = @" { "maxParallelism": 1, "id": INSERTID, "enabled": true #Or false } "@ $headers = New-Object System.Net.WebHeaderCollection $headers.Add("X-HTTP-Method-Override", "PATCH") TFSwebRequest -Uri $agentUri -Method "POST" -Headers $headers -ContentType "application/json" -ContentBody $contentBody 

代理池和代理的Rest API:

获取代理池(请求方法:获取):

 http://[TFS URL]/_apis/distributedtask/pools?api-version=2.3-preview.1 

获取代理池的代理(请求方法:获取):

 http://[TFS URL]/_apis/distributedtask/pools/[pool id]/agents?api-version=2.3-preview.1 

禁用/启用构建代理(请求方法:PATCH)

 http://[TFS URL]/_apis/distributedtask/pools/[pool id]/agents/[agent id]?api-version=2.3-preview.1 

正文(内容类型:application / json)

 { "enabled":false, "id":[agent id], "maxParallelism":1 } 

从代理池中删除代理(请求方法:删除):

 http://[Tfs URL]/_apis/distributedtask/pools/[pool id]/agents/[agent id]?api-version=2.3-preview.1 

调用REST API(PowerShell)的简单示例:

 Param( [string]$vstsAccount = "", [string]$projectName = "", [string]$buildNumber = "", [string]$keepForever = "true", [string]$user = "", [string]$token = "" ) # Base64-encodes the Personal Access Token (PAT) appropriately $base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $user,$token))) $uri = "https://$($vstsAccount).visualstudio.com/DefaultCollection/$($projectName)/_apis/build/builds?api-version=2.0&buildNumber=$($buildNumber)" $result = Invoke-RestMethod -Uri $uri -Method Get -ContentType "application/json" -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} 

有关详细信息: 使用PowerShell调用VSTS API

用于调用REST API的C#代码:

 String MyURI = "REST API URL"; WebRequest WReq = WebRequest.Create(MyURI); WReq.Credentials = new NetworkCredential("[user name]", "[password]", "[domain]"); WebResponse response = WReq.GetResponse(); Console.WriteLine(((HttpWebResponse)response).StatusDescription); Stream dataStream = response.GetResponseStream(); StreamReader reader = new StreamReader(dataStream); string responseFromServer = reader.ReadToEnd(); Console.WriteLine(responseFromServer); 

另一方面,在将新软件安装到代理计算机以便识别它们之后,需要重新启动生成代理。

没有这样的api来从代理池创建或删除代理。 编写自己的脚本不需要,下载代理时,只需要以管理员身份运行命令提示符,然后在构建代理计算机上运行ConfigureAgent.cmd

 C:\Agent\ConfigureAgent.cmd 

然后回应提示。 检查https://www.visualstudio.com/en-us/docs/build/admin/agents/v1-windows