从 Atlassian 的云/按需服务中获取用户列表
Get a list of users from Atlassian's Cloud / On-Demand Service
我正在尝试从我们的 Atlassian Confluence/Jira 实例中提取用户列表。但是,我正在努力寻找有关可用 REST 服务的良好文档,SOAP 服务似乎已被弃用。
下面的代码确实得到了结果,但是我们有超过 100 个用户,而这个 returns 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": [
]
}
]
}
}
我认为结果试图为我提供 JIRA 和 Confluence 用户 API 的 URL;但我无法弄清楚那些相对 URLs 是如何映射到根 URL(我已经尝试在 URL 的不同位置追加,所有这些都给了我一个 404
或 dead link
错误)。
您后续调用中的 query 参数是对姓名或电子邮件地址的搜索查询。
参考:https://docs.atlassian.com/jira/REST/cloud/#api/2/groupuserpicker.
您可以使用 maxResults 参数来获得超过 50 个结果。
遗憾的是,此 REST API 调用不会在一次调用中为您提供所有用户。
据我所知,使用 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 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
作为替代答案,我最近在 GitHub 上发现了 PSJira 项目:https://github.com/replicaJunction/PSJira。
这个库围绕 JIRA 服务提供了一组很好的包装函数,并且似乎有很好的记录和维护。
要达到上述要求,请按照以下步骤操作:
正在安装包:
- 记录于此:https://github.com/replicaJunction/PSJira#downloading
- 升级到 PS5(可选;但此安装方法需要):https://download.microsoft.com/download/6/F/5/6F5FF66C-6775-42B0-86C4-47D41F2DA187/Win7AndW2K8R2-KB3191566-x64.zip
- 安装 NuGet 包管理器:
Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force
- 安装 PSJira 模块:
Install-Module PSJira
正在配置 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
我正在尝试从我们的 Atlassian Confluence/Jira 实例中提取用户列表。但是,我正在努力寻找有关可用 REST 服务的良好文档,SOAP 服务似乎已被弃用。
下面的代码确实得到了结果,但是我们有超过 100 个用户,而这个 returns 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": [
]
}
]
}
}
我认为结果试图为我提供 JIRA 和 Confluence 用户 API 的 URL;但我无法弄清楚那些相对 URLs 是如何映射到根 URL(我已经尝试在 URL 的不同位置追加,所有这些都给了我一个 404
或 dead link
错误)。
您后续调用中的 query 参数是对姓名或电子邮件地址的搜索查询。 参考:https://docs.atlassian.com/jira/REST/cloud/#api/2/groupuserpicker.
您可以使用 maxResults 参数来获得超过 50 个结果。
遗憾的是,此 REST API 调用不会在一次调用中为您提供所有用户。
据我所知,使用 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 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
作为替代答案,我最近在 GitHub 上发现了 PSJira 项目:https://github.com/replicaJunction/PSJira。
这个库围绕 JIRA 服务提供了一组很好的包装函数,并且似乎有很好的记录和维护。
要达到上述要求,请按照以下步骤操作:
正在安装包:
- 记录于此:https://github.com/replicaJunction/PSJira#downloading
- 升级到 PS5(可选;但此安装方法需要):https://download.microsoft.com/download/6/F/5/6F5FF66C-6775-42B0-86C4-47D41F2DA187/Win7AndW2K8R2-KB3191566-x64.zip
- 安装 NuGet 包管理器:
Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force
- 安装 PSJira 模块:
Install-Module PSJira
正在配置 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