Как создать ошибку в TFS с помощью REST API в PowerShell?

Я пытаюсь создать ошибку в TFS с помощью REST API в PowerShell с помощью приведенного ниже кода, но я не могу понять, как заполнить переменную $Bug именами этих параметров и данных.

Param(
   [string]$vstsAccount = "MyAccountName",
   [string]$projectName = "ProjectName",
   [string]$keepForever = "true",
   [string]$user = "",
   [string]$token = "Mytoken"
)

# Base64-encodes the Personal Access Token (PAT) appropriately
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $user,$token)))
#$uri = "https://$($vstsAccount).visualstudio.com/$($projectName)/_apis/wit/workitems/$Bug?api-version=2.2"
$result = Invoke-RestMethod -Uri $uri -Method Get -ContentType "application/json" -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)}

Я мог найти образец для C# здесь, но не для PowerShell. Любая помощь будет оценена по достоинству.

Ваше здоровье


person SCode    schedule 19.09.2017    source источник
comment
Во-первых, вы не отправляете серверу никаких данных с запросом GET.   -  person Maximilian Burszley    schedule 19.09.2017
comment
Кажется, $Bug - это не переменная, а часть URL-адреса. Так что вам нужно экранировать его: `$bug (обратите внимание на обратную галочку!)   -  person marsze    schedule 20.09.2017
comment
@ TheIncorrigible1, спасибо за ответ, да, я исправил свою ошибку, а до этого я также попробовал POST, позже я использовал Patch, как предложил Энди.   -  person SCode    schedule 22.09.2017


Ответы (1)


Вам нужно создать тело JSON, чтобы использовать REST API для создания рабочего элемента в PowserShell, и Content-Type должно быть application/json-patch+json, также используйте метод PATCH. См. Создание работы элемент для получения подробной информации.

Вы можете сослаться на пример сценария PowerShell ниже, чтобы создать ошибку:

Param(
   [string]$baseurl = "http://server:8080/tfs/DefaultCollection",
   [string]$projectName = "ProjectName",
   [string]$keepForever = "true",
   [string]$user = "username",
   [string]$token = "token"
)

# Base64-encodes the Personal Access Token (PAT) appropriately
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $user,$token)))

function CreateJsonBody
{

    $value = @"
[
  {
    "op": "add",
    "path": "/fields/System.Title",
    "value": "0925Bug"
  },
  {
    "op": "add",
    "path": "/fields/System.AreaPath",
    "value": "LCScrum"
  },

  {
    "op": "add",
    "path": "/fields/System.IterationPath",
    "value": "LCScrum\\Sprint 1"
  },

  {
    "op": "add",
    "path": "/fields/System.Tags",
    "value": "Tag0921;Tag0926;Tag0927;Tag0928"
  },

  {
    "op": "add",
    "path": "/fields/Microsoft.VSTS.Common.Activity",
    "value": "Development"
  },

  {
    "op": "add",
    "path": "/fields/Microsoft.VSTS.Scheduling.Effort",
    "value": "8"
  },
  {
    "op": "add",
    "path": "/fields/Microsoft.VSTS.Common.ValueArea",
    "value": "Business"
  },
  {
    "op": "add",
    "path": "/fields/Microsoft.VSTS.Common.Severity",
    "value": "3 - Medium"
  },
  {
        "op": "add",
        "path": "/relations/-",
        "value":
        {
            "rel": "System.LinkTypes.Dependency-Forward",
            "url": "http://server:8080/tfs/DefaultCollection/_apis/wit/workItems/324",
            "attributes":
            {
               "usage": "workItemLink",
               "editable": false,
               "enabled": true,
               "acyclic": true,
               "directional": true,
               "singleTarget": true,
               "topology": "dependency"
            }
        }
    },
    {
        "op": "add",
        "path": "/relations/-",
        "value":
        {
            "rel": "System.LinkTypes.Hierarchy-Reverse",
            "url": "http://server:8080/tfs/DefaultCollection/_apis/wit/workItems/58",
            "attributes":
            {
              "usage": "workItemLink",
              "editable": false,
              "enabled": true,
              "acyclic": true,
              "directional": true,
              "singleTarget": false,
              "topology": "tree"
            }
        }
    }
]
"@

 return $value
}

$json = CreateJsonBody

$uri = "$baseurl/$($projectName)/_apis/wit/workitems/"+"$"+"bug?api-version=2.2"
Write-Host $uri
$result = Invoke-RestMethod -Uri $uri -Method Patch -Body $json -ContentType "application/json-patch+json" -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)}

введите здесь описание изображения

person Andy Li-MSFT    schedule 20.09.2017
comment
Привет, Энди, спасибо за этот ответ, и это было полезно, однако у меня было еще несколько последующих проблем. Например, ошибка, которая создается, не отображается в проекте (отставание), но то же самое можно увидеть только при нажатии на название проекта левый верхний угол экрана. когда я снова проверил это, это происходит, потому что он не создается ни под каким спринтом/итерацией. - person SCode; 20.09.2017
comment
2) как мне выяснить все другие поля, которые можно добавить к объекту Json для создания проблем, таких как теги, итерация, усилие и т. д. (имя поля, путь и т. д.) - person SCode; 20.09.2017
comment
@SCode Просто следуйте инструкциям для каждого параметра, упомянутого в этой ссылке: Создать рабочий элемент. В любом случае, я обновил ответ, вы можете сослаться на образец, чтобы соответствующим образом изменить значение. - person Andy Li-MSFT; 21.09.2017
comment
это отлично сработало для меня, большое спасибо. Я изучал добавление нескольких тегов при создании ошибки, я пытался повторить блок кода тегов один за другим, но он просто взял более поздний как тег, и был создан только один тег. Есть ли информация о добавлении нескольких тегов? в настоящее время я планирую сделать это, создавая его самостоятельно и не обновляя ошибку снова ... Заранее спасибо .. - person SCode; 22.09.2017
comment
@SCode Для нескольких тегов просто разделите их точкой с запятой, обновив приведенный выше пример, вы можете это проверить. Если это работает для вас, вы можете принять это как ответ, Это может быть полезно другим членам сообщества, читающим эту ветку. - person Andy Li-MSFT; 22.09.2017
comment
значение: Tag0921;Tag0926;Tag0927;Tag0928 это работает, есть ли способ добавить эти данные из массива? в смысле динамические данные? например, я пробовал Data[$i][0] ;Data[$i][1] и Data[$i][0] ;Data[$i][1] в обоих из них добавляется объект, а не данные ... Также пробовал с $ - person SCode; 25.09.2017