如何通过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
相关产品推荐
相关产品推荐

