Azure DevOps 工作项附件上传日期

Azure DevOps Work Item Attachment Upload Date

我目前有许多针对 DevOps 中不同工作项的附件(都在一个项目站点中)。我认为有一些附件是在指定的签收日期之后上传的,希望能够下拉数据以便我可以将附件上传日期与签收日期进行比较。

我可以看到 DevOps 中有一个附件计数字段,但我无法发现任何附件。这可能吗?如果我能以某种方式将结果放入电子表格中,那么我就可以做我需要做的事情,因为签字日期是我知道我可以得到的自定义字段。

当然可以,您可以获得附件详细信息。不幸的是,您将不得不使用 Azure DevOps API。查询编辑器仅限于查询附件计数。

您将能够使用与此类似的查询来获取完整的附件详细信息

运行 在替换令牌后在邮递员中,或直接在您的浏览器中(您的身份验证将继续):

https://dev.azure.com/**YOUR_ORGANIZATION**/**YOUR_PROJECT**/_apis/wit/workitems?ids=**WORK_ITEM_IDs**&api-version=6.0&$expand=relations

您需要用逗号分隔您的工作项 ID(例如:1,2,3)。

您将能够在 JSON:

关系 属性 中找到您的工作项详细信息
  ...
  "relations": [
        {
            "rel": "AttachedFile",
            "url": "https://dev.azure.com/YOUR ORG/GUID/_apis/wit/attachments/GUID",
            "attributes": {
                "authorizedDate": "2021-02-15T20:13:13.333Z",
                "id": 1234567,
                "resourceCreatedDate": "2021-02-15T20:13:10.607Z",
                "resourceModifiedDate": "2020-12-18T00:31:48.663Z",
                "revisedDate": "9999-01-01T00:00:00Z",
                "resourceSize": 123456,
                "name": "TEST-ATTACHMENT.PNG"
            }
        }
    ],
  ...

I've got quite a lot of work items to check through unfortunately 2300(ish). Is there a max limit for the number of work items I can query at once??

解释:

此 Powershell 示例将执行以下两个 Rest APIs:Wiql - Query By Wiql and Work Items - Get Work Item

Wiql - 通过 Wiql Rest 查询 API 将列出所有工作项。限制为 20000 个工作项。它可以满足您的要求。

工作项 - 获取工作项 Rest API 将根据第一个 Rest API 的 ID 获取工作项。

然后您可以使用 $expand=relations 获取工作项附件。

更新:

要获取所有工作项附件并导出到 csv,您可以尝试以下示例:

$token = "PAT"

$url="https://dev.azure.com/{Org}/_apis/wit/wiql?api-version=5.1"

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

$JSON = @'
{
   "query": "Select [System.Id], [System.Title], [System.State] From WorkItems Where [System.WorkItemType]  <> ''"
}
'@

$response = Invoke-RestMethod -Uri $url -Headers @{Authorization = "Basic $token"} -Method Post -Body $JSON -ContentType application/json


ForEach( $workitemid in $response.workItems.id ) 
{

echo $workitemid

$url1="https://dev.azure.com/{Org}/{Project}/_apis/wit/workitems/$($workitemid)?"  + "`$expand" + "=relations&api-version=6.0"

$response1 = Invoke-RestMethod -Uri $url1 -Headers @{Authorization = "Basic $token"} -Method Get 

#Write-Host "Pipeline = $($response1| ConvertTo-Json -Depth 100)"

$date = $response1.relations.attributes.resourceCreatedDate

$date1 = [String]$date

$Attachmentmentname = $response1.relations.attributes.name

$Attachmentmentname1 = [String]$Attachmentmentname

$workitemtitle = $response1.fields.'System.Title'

echo Workitemid: $workitemid  WorkitemTitle: $workitemtitle   Attachmentdate: $date 

$Output = New-Object -TypeName PSObject -Property @{
    id = $workitemid
    date = $date1
    Attachmentmentname = $Attachmentmentname1 
    Title = $workitemtitle
  } | Select-Object id, Title,Attachmentmentname,date
$Output | Export-Csv D:\GPoutput.csv -Append


}

结果: