这些TFS(内部)REST URL所需的权限?

时间:2018-06-29 12:33:26

标签: rest tfs

我正在尝试自动化一些需要有关代理程序池和代理程序信息的作业,尽管该作业脚本对我的TFS集合的普通用户来说工作得很好,但是对于服务帐户却失败了。

我的工作脚本试图访问URL

http://<instance>/<collection>/_apis/distributedtask/pools
http://<instance>/<collection>/_apis/distributedtask/pools/<pool>/agents

最初我的服务帐户得到了类似的回复

TF400813: The user &#39;<service account>&#39; is not authorized to access this resource

该服务帐户以前不是任何与TFS相关的AD组的成员,但是在创建新组并将其添加到“项目集合有效用户”之后,调用不会失败,但是响应仍不包括任何池信息。

如果我修改服务帐户交互式登录名,则代理池中的代理GUI不会显示任何信息,但会显示提示

no agents are registered or you do not have permission to view the agents 

建议缺少权限。

我试图将服务帐户添加到TFS中的各个组中,例如Project Collection Administrators,Project Collection Build Administrators等。

因此,简而言之,服务帐户需要什么权限才能从开头提到的URL中检索信息?

1 个答案:

答案 0 :(得分:0)

我可以重现此问题,即使将常规用户更改为服务帐户也无法正常工作。

因此,作为一种变通办法,您现在可以使用常规用户或脚本中的PAT来调用REST API。

以下PowerShell脚本对我有用:

$user = "Domain\username"
$token = "password"

# Base64-encodes the Personal Access Token (PAT) appropriately
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $user,$token)))

$uri = "http://SERVER:8080/tfs/_apis/distributedtask/pools/1/agents/5"
$result = Invoke-RestMethod -Uri $uri -Method Get -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)}

Write-Host "result = $($result | ConvertTo-Json -Depth 100)"