なんかやるたびに調べている気がするので自分用のメモ。
新しいのが好きなので、7.1 Previewです。結構頻繁に更新されているので、気が付いたら8.0とかになっているかもしれません。
$PATに作成したPersonal Access Tokenが格納されているとします。
権限はWork ItemsのRead & writeがあれば大丈夫なはずです。
$organization = '{Your Organization}'
$Project = '{Your Project}'
$TaskName = '{Your Task Title}'
$PAT='{Your Personal Access Token}'
$TaskTitle=[System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes($TaskName))
$token = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$PAT"))
$header = @{authorization = "Basic $token"}
$uri = 'https://dev.azure.com/$organization/$Project/_apis/wit/workitems/$User%20Story?api-version=7.1-preview.3'
$jsonbody="[
{
`"op`": `"add`",
`"path`": `"/fields/System.Title`",
`"value`": `"$TaskTitle`"
}
]"
$json = Invoke-RestMethod -Uri $Uri -Method Post -ContentType "application/json-patch+json" -Headers $header -body $jsonbody
$uri のworkitemsに続く値はプロセステンプレートにあるタスクの種類になります。私のサンプルではAgileで作っているプロジェクトに対して発行しているので、User%20Storyですが、ScrumであればProduct%20Backlog%20Itemなどになります。空白も含まれるので、%20を忘れないように注意。
タスク名に日本語を使う場合、Base64 Encodingが必要です。
Azure Pipelinesから呼び出して、PATをLibraryに格納する場合(まぁしますよね)、":$PAT"ではなく、":$ENV:PAT"となります。
これは「作るだけ」なので、このAPIで作ってもタスクが作成されるだけになります。Iteration、Area、Assigned toなどの値はUpdateで更新していきます。
全部のフィールド設定するのは大変ですが、先ほどのBodyは配列指定ができるので、最初op:addの次の要素でほかの要素も指定すればいいはずです…また後で検証してみます。