You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过PowerShell REST API获取Azure DevOps部署组目标的功能

获取Azure DevOps部署组目标的功能(Capabilities)

要获取部署组下目标的功能信息,你不需要额外调用新的API端点——获取目标详情的API本身就会返回功能数据。当你调用目标详情接口时,返回的JSON对象中包含capabilities(自定义功能)和systemCapabilities(系统内置功能)两个字段。

修改步骤:

  • 在获取到$targetId后,调用目标详情接口时,将返回结果保存到变量中,而非仅输出离线提示
  • 从返回结果中提取capabilities和systemCapabilities字段,按需输出或处理

修改后的完整脚本:

$projects = "testing"
$projectlist = $projects.split(';')
$PAT = "#######################################33"
$Header =  @{Authorization = 'Basic ' + [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(":$($PAT)")) }      

foreach($projectName in $projectlist){
    write-host "================================================="
    $baseURL = "https://dev.azure.com/abc/$($projectName)/_apis/distributedtask/deploymentgroups" 
    $deploymentgroup=Invoke-RestMethod -Uri "https://dev.azure.com/abc/$($projectName)/_apis/distributedtask/deploymentgroups?api-version=6.0-preview.1" -Method get -Headers $Header
    $deploymentgroupsname=$deploymentgroup.value.name

    foreach($deploymentgroupname in $deploymentgroupsname){
        $deploymentGroupURL = "$($baseURL)?name=$($deploymentgroupname)&api-version=6.0"
        try{
            $deploymentgroup=Invoke-RestMethod -Uri "$deploymentGroupURL" -Method get -Headers $Header
        }catch{
            write-host "URL is not accessible - $deploymentGroupURL"
            continue
        }
        $deploymentGroupResponse=$deploymentgroup.value
        $deploymentGroupid=$deploymentGroupResponse.id

        try{
            $targets=Invoke-RestMethod -Uri "https://dev.azure.com/abc/$($projectName)/_apis/distributedtask/deploymentgroups/$($deploymentGroupid)/targets?api-version=6.0-preview.1" -Method get -Headers $Header
        }catch{
            write-host "URL is not accessible - $deploymentGroupURL"
            continue
        }

        if($null -ne $deploymentGroupId){
            $targets.value.agent | Select-Object name, status | ForEach-Object {
                $hostname=$_.name
                $Status=$_.status
                
                # 获取目标详情(包含功能信息),支持在线/离线目标
                $targetURL = "$($baseURL)/$deploymentGroupId/targets?name=$($hostName)&api-version=6.0-preview.1"
                try{ 
                    $target = (Invoke-RestMethod -Uri $targetURL -Method get -Headers $Header).value 
                    $targetId = $target.id ;
                    
                    if($null -ne $targetId){
                        $targetDetailsURL = "$($baseURL)/$deploymentGroupId/targets/$($targetId)?api-version=6.0"
                        try{
                            $targetDetails = Invoke-RestMethod -Uri $targetDetailsURL -Method get -Headers $Header
                            
                            write-host "====================================="
                            write-host "项目名称: $projectName"
                            write-host "部署组名称: $deploymentgroupname"
                            write-host "目标主机名: $hostname"
                            write-host "目标状态: $Status"
                            
                            # 输出自定义功能
                            write-host "`n自定义功能:"
                            $targetDetails.capabilities | Out-Host
                            
                            # 输出系统功能
                            write-host "`n系统功能:"
                            $targetDetails.systemCapabilities | Out-Host
                            
                            # 示例:筛选特定系统功能(如操作系统)
                            # write-host "操作系统: $($targetDetails.systemCapabilities['OS'])"
                        }
                        catch{
                            write-host "获取目标详情失败: $hostName";Write-Error $_.Exception.Message
                        }
                    }
                    else{ 
                        write-host "部署组 $deploymentgroupname 中未找到目标 $hostName"
                    }
                }catch {
                    write-host "获取目标列表失败";Write-Error $_.Exception.Message
                }
            }
        }else{
            write-host "项目 $projectName 中未找到部署组 $deploymentgroupname"
        }    
    }
} 

字段说明:

  • capabilities:存储用户为目标配置的自定义功能标签(如部署环境、角色等)
  • systemCapabilities:存储目标代理的系统属性(如操作系统版本、.NET版本、PowerShell版本等)
  • 若仅需获取离线目标的功能信息,可恢复原脚本中的if($status -eq "offline")判断块

内容的提问来源于stack exchange,提问作者tani joshi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 18:06:18