1

Я пытаюсь вытащить список пользователей из нашего экземпляра Atlassian Confluence/Jira. Однако я изо всех сил пытаюсь найти хорошую документацию о том, какие сервисы REST доступны, и кажется, что службы SOAP устарели.Получить список пользователей из службы Atlasian Cloud/On-Demand

Следующий код делает получить результаты, но у нас есть более 100 пользователей, и это возвращает 0.

if(-not ($credentials)) { #put this here so I can rerun the same script in the same IDE session without having to reinput credentials each time 
    $credentials = get-credential 'myAtlassianUsername' 
} 
$tenant = 'myCompany' 
invoke-restmethod -Method Get -Uri ('https://{0}.atlassian.net/rest/api/2/groupuserpicker?query=users' -f $tenant) -Credential $credentials | ConvertTo-Json -Depth 5 

(ConvertTo-Json просто, чтобы сделать его проще, чтобы увидеть расширенный набор результатов).

{ 
    "users": { 
        "users": [ 

          ], 
        "total": 0, 
        "header": "Showing 0 of 0 matching users" 
       }, 
    "groups": { 
        "header": "Showing 2 of 2 matching groups", 
        "total": 2, 
        "groups": [ 
            { 
             "name": "confluence-users", 
             "html": "confluence-\u003cb\u003eusers\u003c/b\u003e", 
             "labels": [ 

               ] 
            }, 
            { 
             "name": "jira-users", 
             "html": "jira-\u003cb\u003eusers\u003c/b\u003e", 
             "labels": [ 

               ] 
            } 
           ] 
       } 
} 

Я думаю, что результат пытается дать мне URL-адреса для API-интерфейсов JIRA и Confluence User API; но я не могу понять, как эти относительные URL-адреса сопоставляются с корневым URL-адресом (я попытался добавить в различные позиции в URL-адресе, все из которых дают мне ошибку 404 или dead link).

+1

Согласно Atlassian (для Confluence): XML-RPC и SOAP API, так как устаревшие v5.5, но: XML-RPC не будет удален до тех пор, пока достаточно охват API REST слияния, мы устарели XML-RPC, чтобы указать, что новый код должен быть написан для использования rest api, где это возможно. Вы все еще можете использовать RPC, в то время как REST API разрабатывается постепенно. Однако вызов в список всех пользователей недоступен в SOAP или REST API. На нашей стороне мы разработали собственный плагин, чтобы разоблачить эту функцию. – mtheriault

ответ

1

Запрос в следующем вызове - это поисковый запрос на имя или адрес электронной почты. Код: https://docs.atlassian.com/jira/REST/cloud/#api/2/groupuserpicker.

Вы можете использовать maxResults параметр, чтобы получить более 50 результатов.

К сожалению, этот вызов API REST не даст вам всех пользователей за один звонок.

Единственный способ, который я знаю, что делать с Jira, чтобы получить все пользователи, чтобы сделать один звонок, начиная письмо (итерацию по каждой букве):

GET .../rest/api/2/user/search?username=a&maxResults=1000 
GET .../rest/api/2/user/search?username=b&maxResults=1000 
GET .../rest/api/2/user/search?username=c&maxResults=1000 
... 

Ссылка: https://docs.atlassian.com/jira/REST/cloud/#api/2/user-findUsers

Пример кода

function Get-AtlassianCloudUsers { 
    [CmdletBinding()] 
    param (
     [Parameter(Mandatory)][string]$Tenant 
     , 
     [Parameter(Mandatory)][System.Management.Automation.Credential()]$Credential 
     , 
     [Parameter(Mandatory=$false)][string]$UserFilter = '%' 
     , 
     [Parameter(Mandatory=$false)][int]$MaxResults = 9999 
    ) 
    process { 
     #refer to http://stackoverflow.com/questions/40424377/get-a-list-of-users-from-atlassians-cloud-on-demand-service for additional notes 
     [string]$uri = 'https://{0}.atlassian.net/rest/api/2/user/search?username={1}&maxResults={2}' -f $Tenant, $UserFilter, $MaxResults 
     Invoke-RestMethod -Method Get -Uri $Uri -Credential $credential | select -Expand syncRoot | Select-Object name, displayName, active, self 
     #| ConvertTo-Json -Depth 5 
    } 
} 

Get-AtlassianCloudUsers -Tenant 'MyCompany' -credential (Get-Credential 'MyUsername') | ft -AutoSize 
+0

Идеально; Благодарю вас @mtheriault. NB: используя параметр 'startAt' в querystring, я смог настроить разбиение на страницы, чтобы не беспокоиться о соответствующих ограничениях на значение' maxResults'. – JohnLBevan

+1

Кроме того, я нашел здесь ответ, указав, что вместо начального символа имени пользователя можно использовать шаблон '%', чтобы получить все результаты: https://answers.atlassian.com/questions/9396305/answers/39428244 – JohnLBevan

0

в качестве альтернативного ответа, я недавно обнаружил проект PSJira на GitHub: https://github.com/replicaJunction/PSJira.

Эта библиотека предоставляет хороший набор функций обертки вокруг сервисов JIRA и, кажется, хорошо документирована и поддерживается.

Для достижения выше требований выполните следующие действия:

Установка пакета:

Настройка PSJira:

  • Set-JiraConfigServer -Server "https://$Tenant.atlassian.net" (присвоение $Tenant на имя вашего экземпляра)

Использование:

  • Создайте учетные данные для учетной записи Jira/Atlassian: $cred = get-credential $JiraUsername
  • Получить список пользователей: Get-JiraUser -UserName '%' -IncludeInactive -Credential $cred | select Name, DisplayName, Active, EmailAddress
Смежные вопросы