如何通过命令行禁用AzureDevOps池中的自托管代理

时间:2020-06-10 13:26:28

标签: azure-devops-rest-api azure-devops-self-hosted-agent

我们在AzureDevOps中有多个自托管的生成代理,我想自动进行维护。 (诸如Windows更新或VSbuild工具之类的东西)

我想禁用池中的代理,以便在运行更新时它不接收构建任务。

有人知道如何通过命令行吗?

1 个答案:

答案 0 :(得分:1)

有人知道如何通过命令行吗?

您可以在本地计算机上使用Powershell.exe(Cmd.exe is not recommended for calling azure devops rest api来代替CMD,以通过此rest api禁用任何自托管代理:

Patch https://dev.azure.com/{OrganizationName}/_apis/distributedtask/pools/{PoolID}/agents/{AgentID}?api-version=5.0

请求正文:

{
    "id":{AgentID},"enabled":false
}

详细信息:

  1. 转到“组织设置” =>“代理程序池” =>“选择用于托管自托管代理程序的池” =>选中“ Agents”选项卡,然后单击其中一个代理程序以查看详细信息。然后您可以找到PoolIDAgentID

    enter image description here

  2. 现在,让我们创建一个PAT来向Azure DevOps进行身份验证。仅Agent Pools的“读取和管理”访问权限就足够了。

    enter image description here

  3. 假设我的organizationName是TestOrganization,那么我最终的powershell脚本将是:

(您可以在Windows Powershell ISE中运行它)

$token = "wjqtxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxtgiga"

$url="https://dev.azure.com/TestOrganization/_apis/distributedtask/pools/10/agents/9?api-version=5.0"

$token = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($token)"))

$JSON = @'
{
    "id":9,"enabled":false
}
'@

$response = Invoke-RestMethod -Uri $url -Headers @{Authorization = "Basic $token"} -Method Patch -ContentType application/json -Body $JSON
write-host $response | ConvertTo-Json -Depth 100

使用$ token(您的PAT),PoolID和AgentID,您可以通过enabled/disabled轻松地控制哪个代理为"enabled":xxx(true or false here)。请注意,您需要同时替换URL和Request正文中的agentID