如何在 PowerShell 中使用 Rest API 创建服务更改

Posted

技术标签:

【中文标题】如何在 PowerShell 中使用 Rest API 创建服务更改【英文标题】:How to create a Service Change using Rest API in PowerShell 【发布时间】:2021-09-12 03:08:13 【问题描述】:

我需要使用 PowerShell 中的 Rest API 在 Azure DevOps (TFS WorkItems) 中创建服务更改

我当前的代码在创建任务时运行良好。但我必须创建一个服务变更。我不确定Resource Area IDs。我应该使用哪个 URI?

$relDefUrl = $DOConfig.tfsBaseUrl + $DOConfig.project + "/_apis/wit/workitems/`$task?api-version=5.1"

function Init-Devops

  [CmdletBinding()]
  param(
      $Pat
    )
    PROCESS
    
        $orgUrl = "https://dev.azure.com/XXXXXX"
        $project = "XXXX"
        $Team = "XXXX"
        $token = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($Pat)"))
        $header = @authorization = "Basic $token"
        $WorkItemTrackingAreaId = "85f8c7b6-92fe-4ba6-8b6d-fbb67c809341"
        $tfsBaseUrl = GetUrl -orgUrl $orgUrl -header $header -AreaId $WorkItemTrackingAreaId
        $DOConfig=@
            "orgUrl"=$orgUrl;
            "project"=$project;
            "token"=$token;
            "header"=$header;
            "WorkItemTrackingAreaId"=$TFSQuery;
            "TFSQuery"=$TFSQuery;
            "tfsBaseUrl"=$tfsBaseUrl
            "Team"=$Team
        
    return $DOConfig
    


function GetUrl() 
    param(
        [string]$orgUrl, 
        [hashtable]$header, 
        [string]$AreaId
    )
    $orgResourceAreasUrl = [string]::Format("0/_apis/resourceAreas/1?api-preview=5.0-preview.1", $orgUrl, $AreaId)
    $results = Invoke-RestMethod -Uri $orgResourceAreasUrl -Headers $header
    if ("null" -eq $results) 
        $areaUrl = $orgUrl
    
    else 
        $areaUrl = $results.locationUrl
    
    return $areaUrl


function Add-DevopsTask

  [CmdletBinding()]
  param(
    $Body,
    $DOConfig,
    $Live
    )
    PROCESS
    
        $relDefUrl = $DOConfig.tfsBaseUrl + $DOConfig.project + "/_apis/wit/workitems/`$task?api-version=5.1"
        $RestParams = @
            Uri         = $relDefUrl   
            ContentType = 'application/json-patch+json'
            Headers     = $DOConfig.header
            Method      = "POST"
            Body        = $Body
        
        Invoke-RestMethod @RestParams -Verbose          
    


$pat = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
$DOConfig=Init-Devops $pat

$xbody=@()
$vState="Proposed"
$xState = @
            op    = "add"
            path  = "/fields/System.State"
            value = $vState
           
$xbody += $xState

$vAssignedto = 'venkatag@microsoft.com'
$xAssignedto = @
                op    = "add"
                path  = "/fields/System.AssignedTo"
                value = $vAssignedto
                
$xbody += $xAssignedto

$vTitle = "Compliance Project Test Task"
$xTitle = @
            op    = "add"
            path  = "/fields/System.Title"
            value = $vTitle
            
$xbody += $xTitle

$vTags = "CPXCompliance"
$xTags = @
            op    = "add"
            path  = "/fields/System.Tags"
            value = $vTags
          
$xbody += $xTags

$vAreaPath = "OSGS\CRE\Store Core\CSTSRE"
$xAreaPath = @
                op    = "add"
                path  = "/fields/System.AreaPath"
                value = $vAreaPath
            
$xbody += $xAreaPath
$body=$xbody | ConvertTo-Json

Add-DevopsTask $body $DOConfig

【问题讨论】:

服务变更是您的自定义工作项类型吗?为什么它与 Task 不同? @Shayki Abramczyk。是的,实际上你是对的。它与任务相同,但是,我需要帮助来确定我身体的以下字段。其他类型、环境、部署批准人技术批准人状态 - 子状态 @Shayki Abramczyk。实际上,我浏览了可用字段,并且能够使用 PowerShell 创建服务更改。我休息一下。感谢您的帮助。 【参考方案1】:

实际上,我浏览了可用字段,并且能够使用 PowerShell 创建服务更改。我休息一下。感谢您的帮助。

我们可以使用下面的WorkItemTrackingAreaId来创建Service Change。

$WorkItemTrackingAreaId = "85f8c7b6-92fe-4ba6-8b6d-fbb67c809341"

【讨论】:

以上是关于如何在 PowerShell 中使用 Rest API 创建服务更改的主要内容,如果未能解决你的问题,请参考以下文章

无法在 PowerShell 中使用 REST API 删除 DevOps 分支

在PowerShell中序列化REST响应

powershell 使用REST-API的PowerShell V3 Multipart / formdata示例(Invoke-RestMethod)

powershell 使用REST-API的PowerShell V3 Multipart / formdata示例(Invoke-RestMethod)

如何使用 Azure REST API 从管道中获取所有变量?

powershell REST API PowerShell函数列表