我正在尝试自动化一些需要有关代理程序池和代理程序信息的作业,尽管该作业脚本对我的TFS集合的普通用户来说工作得很好,但是对于服务帐户却失败了。
我的工作脚本试图访问URL
http://<instance>/<collection>/_apis/distributedtask/pools
http://<instance>/<collection>/_apis/distributedtask/pools/<pool>/agents
最初我的服务帐户得到了类似的回复
TF400813: The user '<service account>' 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中检索信息?
答案 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)"