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

使用PowerShell通过PAT获取ADO项目列表时JSON转换报错求助

问题:Azure DevOps项目列表获取脚本报错,需导出数据到Excel

我尝试用个人访问令牌(PAT)和以下PowerShell脚本从Azure DevOps(ADO)获取项目列表:

$token = "PAT"
$url="https://dev.azure.com/adient/_apis/projects?api-version=4.1"
$token = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($token)"))
$response = Invoke-RestMethod -Uri $url -Headers @{Authorization = "Basic $token"} -Method Get -ContentType application/json
$Projects = $response.value.name
ForEach( $project in $Projects) 
{
  $url1="https://dev.azure.com/adient/_apis/projects/$($project)?includeCapabilities=true&includeHistory=true&api-version=4.1"
  $response1 = Invoke-RestMethod -Uri $url1 -Headers @{Authorization = "Basic $token"} -Method Get -ContentType application/json
  
  Write-Host "result= $($response1 | ConvertTo-Json -Depth 100)"
  
 
}
$ActiveProjects = $response1 | ConvertFrom-Json

$ActiveProjects | FT

执行时出现错误:

ConvertFrom-Json : Invalid JSON primitive: .
At line:15 char:32

  • $ActiveProjects = $response1 | ConvertFrom-Json
    ~~~~~~~~~~~~~~~~
    
  • CategoryInfo : NotSpecified: (:) [ConvertFrom-Json], ArgumentException
  • FullyQualifiedErrorId : System.ArgumentException,Microsoft.PowerShell.Commands.ConvertFromJsonCommand

需要解决错误并将部分JSON数据导出到Excel。


解决方案

1. 修复脚本错误

报错核心原因:

  • Invoke-RestMethod返回的是已解析的PowerShell对象,无需再用ConvertFrom-Json转换
  • 循环外的$response1仅保留最后一个项目的数据,未收集所有项目信息

修改后的完整脚本:

# 配置参数
$token = "你的PAT令牌"
$orgUrl = "https://dev.azure.com/adient"
$apiVersion = "4.1"

# 转换令牌为Basic认证格式
$authToken = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$token"))
$headers = @{Authorization = "Basic $authToken"}

# 获取所有项目名称列表
$projectsListUrl = "$orgUrl/_apis/projects?api-version=$apiVersion"
$projectsResponse = Invoke-RestMethod -Uri $projectsListUrl -Headers $headers -Method Get -ContentType application/json
$projectNames = $projectsResponse.value.name

# 收集所有项目的详细信息
$allProjectDetails = @()
foreach ($project in $projectNames) {
    $projectDetailsUrl = "$orgUrl/_apis/projects/$project?includeCapabilities=true&includeHistory=true&api-version=$apiVersion"
    $projectDetail = Invoke-RestMethod -Uri $projectDetailsUrl -Headers $headers -Method Get -ContentType application/json
    
    # 打印当前项目进度(可选)
    Write-Host "已获取项目详情: $($projectDetail.name)"
    
    # 将项目信息添加到集合
    $allProjectDetails += $projectDetail
}

# 预览收集到的数据
$allProjectDetails | Format-Table -AutoSize

2. 导出数据到Excel

方法1:使用专业Excel模块(推荐)

先安装ImportExcel模块(PowerShell Gallery提供):

Install-Module -Name ImportExcel -Scope CurrentUser -Force

在脚本末尾添加导出代码(可自定义导出字段):

# 选择需要导出的字段(根据需求调整)
$exportData = $allProjectDetails | Select-Object name, id, state, lastUpdateTime, url

# 导出到Excel文件
$exportPath = "C:\temp\ADO_Projects.xlsx"
$exportData | Export-Excel -Path $exportPath -AutoSize -BoldTopRow -FreezeTopRow
Write-Host "数据已导出到: $exportPath"

方法2:导出为CSV(无需额外模块)

如果不想安装模块,可先导出为CSV格式,再用Excel打开:

# 选择需要导出的字段
$exportData = $allProjectDetails | Select-Object name, id, state, lastUpdateTime, url

# 导出到CSV文件
$exportPath = "C:\temp\ADO_Projects.csv"
$exportData | Export-Csv -Path $exportPath -NoTypeInformation -Encoding UTF8
Write-Host "数据已导出到: $exportPath"

内容的提问来源于stack exchange,提问作者Raviteja Atchuta

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 01:17:47