微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用Powershell脚本的Azure Devops Rest API结果循环

如何解决使用Powershell脚本的Azure Devops Rest API结果循环

我正在编写脚本,该脚本要为组织中所有天蓝色的devops项目的测试计划生成csv报告

我有下面的脚本,该脚本首先生成所选组织中所有项目的名称,我想在此脚本中循环执行,该循环可以从列表中一个一个获取项目名称,并执行测试计划api并生成输出,然后可以将其保存在csv中文件

$connectionToken = ""
$BaseUrl = "https://dev.azure.com/{organization_name}/_apis/projects?api-versions=5.0"

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

$ProjectInfo = Invoke-RestMethod -Uri $BaseUrl -Headers @{authorization = "Basic $base64AuthInfo"} - 
Method Get

$ProjectDetails = $ProjectInfo | ConvertTo-Json -Depth 100

$Projectname = $ProjectInfo.value.name 

This gives me list of all projects like -
a
b
c
d

现在我想在api下面一一传递这些项目-

TastPlanApi = "https://dev.azure.com/{orgName}/{ProjectName}/_apis/test/plans?api-version=5.0"

$TestplanInfo = Invoke-RestMethod -Uri $TestplanApi -Headers @{authorization = "Basic 
$base64AuthInfo"} - Method Get

如果我提供的项目名称是硬编码的,那么它会给我所需的值,例如-

a
value count
----  -----
{}      0

有什么办法可以将所有项目的这些打印在一起,并以项目名称,值和计数保存在csv文件中吗?还是只有价值非0的项目?

解决方法

您需要将$Projectname更改为[string[]]$Projectname,然后使用ForEach语句。示例代码如下:

[string[]]$Projectname = $ProjectInfo.value.name

ForEach ($project in $Projectname){

$TestPlanApi = "https://dev.azure.com/{org}/$project/_apis/test/plans?api-version=5.0"
$TestplanInfo = Invoke-RestMethod -Uri $TestPlanApi -Headers @{authorization = "Basic $base64AuthInfo"} -Method Get
if (-NOT ($TestplanInfo.count -eq 0)){

$testplanvalue = $TestplanInfo.value.name
$testplancount = $TestplanInfo.count
  
  }
}

然后您需要将$project$testplanvalue$testplancount导出到csv:

https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/export-csv?view=powershell-7

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。