DevOps Azure - установка разрешений проекта с использованием списка контроля доступа API доступа. - PullRequest
0 голосов
/ 30 мая 2019

Я пытаюсь установить разрешения для проектов групп DevOps Azure с помощью DevOps Azure RestApi.Я пытался использовать записи контроля доступа, но это не похоже на работу.

    $securityNamespaceId = "52d39943-cb85-4d7f-8fa8-c6baac873819"
    $groupDesc = "vssgp.Uy0xLTktMTU1MTM3NDI0NS0yMzY2NjcwMjQwLTIyNDExNTQxMjQtMzEwMzY2MTYyNS0zODgxOTE3ODcxLTEtMzk0MjAxMzY5NS00MTY5ODI4NjEtMjk1MDY4ODE5MC0yMDI0NjY2NTQz"
    $projectId = "12313142-eec0-4c3d-b9b5-44d0c3973b3e"
    $token = "`$PROJECT:vstfs:///Classification/TeamProject/$($projectId)"
    $allowMask = 4
    $denyMask = 0
    $bodyInfo = @{
                    token = $token
                    merge = $true
                    accessControlEntries = @{
                            descriptor = $groupDesc
                            allow = $allowMask
                            deny = $denyMask
                            Extendedinfo=  {}               
                    } 
    }| ConvertTo-Json

    $uri = "https://dev.azure.com/<Organization>/_apis/accesscontrolentries/52d39943-cb85-4d7f-8fa8-c6baac873819?api-version=5.0"

    Invoke-RestMethod -Method Post -Uri $uri -Body $bodyInfo -Headers $headers -ContentType "application/json" 

Invoke-RestMethod : {"$id":"1","innerException":null,"message":"TF400898: An Internal Error Occurred. Activity Id: 
73da9e7f-1f9a-4d56-b8ca-f1e9e13513a6.","typeName":"Newtonsoft.Json.JsonSerializationException, Newtonsoft.Json","typeKey":"JsonSerializationException","errorCode":0,"eventId":0}
At line:1 char:1
+ Invoke-RestMethod -Method Post -Uri $uri -Body $bodyInfo -Headers $he ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-RestMethod], WebException
    + FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeRestMethodCommand

1 Ответ

0 голосов
/ 31 мая 2019

Ошибка указывает, что не может десериализовать текущий объект JSON (например, {"name": "value"}) в тип 'System.Collections.Generic.List`1 [Microsoft.VisualStudio.Services.Security.AccessControlEntry]', потому что Тип требует массива JSON (например, [1,2,3]) для десериализации правильно.

Чтобы исправить эту ошибку, либо измените JSON на массив JSON (например, [1,2,3]), либо измените десериализованный тип так, чтобы это был нормальный тип .NET (например, не примитивный тип, такой как целое число, не тип коллекции (например, массив или список), который можно десериализовать из объекта JSON. JsonObjectAttribute также можно добавить к типу, чтобы заставить его десериализоваться из объекта JSON. Путь 'accessControlEntries.allow'.

Также убедитесь, что ваш PAT имеет область действия vso.security_manage.

...