Azure DevOps 用户访问筛选

Posted

技术标签:

【中文标题】Azure DevOps 用户访问筛选【英文标题】:Azure DevOps user access filtering 【发布时间】:2022-01-01 00:26:45 【问题描述】:

我的项目中有一个需求,我们需要使用 cli 找出 Azure DevOps 中用户的存储库访问权限。

使用官方 azure-cli 文档中提供的 CLI 命令,我们能够找出所有用户的***访问权限。

Command-1

az devops user list --org Organisation-Name --query members[].[username,emailid,accesslevel] -o table 

上述命令返回以下输出:

Username     EmailId             AccessLevel
------------------------------------------
John Doe     john.doe@abc.com    Basic
Rick Stein   rick.stein@abc.com  Stakeholder
....

接下来使用从上面列表中提取的用户电子邮件 ID,我们能够找出每个用户的存储库访问粒度级别,如下所示:

命令 #2:

az devops user show --org Organisation Name --user john.doe@abc.com --query "[Username:user.name,ProjectRepoName:repo.access]" 

对应的输出-


  "Username": "John Doe",
  "ProjectRepoName": [
     "Develop.Env1",
     "Test.Env3",
     "UAT.Env2"
  ]

此活动提供有关单个用户级别的所需数据。但是,我们想要上面提到的命令 1 中的用户列表提供的所有用户的数据。

有没有一种方法可以通过脚本将az devops user listaz devops user show 命令组合在一个命令中,该脚本将遍历用户列表中的所有用户以及每个用户,使用 show 命令提供repo 访问的详细信息,然后可以存储为 json/table 输出?

注意:我们可以想到的一种方法是 - 从使用 command-1 生成的列表中过滤掉姓名/电子邮件,并将该列表传递到第二个命令的用户部分。但是,用户部分一次只取一个值,所以不确定如何使用 CLI 操作来实现。

对此的任何帮助或建议都非常感谢。提前致谢。

【问题讨论】:

“但是,用户部分一次只取一个值” - 很容易解决:foreach($email in $listOfEmails) az devops user show --user $email ... @MathiasR.Jessen 感谢您的建议。我试过了,但在执行脚本时出错。在脚本中运行的实际命令是foreach($email in $listOfEmails) az devops user show --org Organisation Name --user ($email) --query "[Username:user.name,ProjectRepoName:repo.access]" >> output.json ERROR: Page not found。操作返回 404 状态码 ERROR: TF10158 The user or group name john.doe@abc.com, contains unsupported characters, is empty or too long 问题是由于引号 ("john.doe@abc.com", "rick.stein@abc.com",..) 在过滤后的输出,它被传递到脚本的第二个命令。将过滤后的输出格式从 JSON 更新为 Table,这成功解决了问题。现在根据要求在 output.json 文件中获取适当的输出。再次感谢关于循环逻辑的建议。 那太好了,考虑answering your own question! 【参考方案1】:

解决此问题的方法是使用 foreach 循环逻辑并使用适当的格式过滤命令一的输出。

工作代码的sn-p-

.......
$listOfMails = (az devops user list --org Organisation-Name --query members[].emailid -o table)

foreach($email in $listOfEmails)

    (az devops user show --org Organisation Name --user ($email) --query "[Username:user.name,ProjectRepoName:repo.access]")

...

这导致根据要求成功提取数据。

【讨论】:

以上是关于Azure DevOps 用户访问筛选的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 powershell/Azure CLI 列出有权访问 Azure DevOps 项目存储库的用户?

如何请求访问 Azure DevOps 中的项目?

在 Azure DevOps 中,由于权限问题,开发人员无法访问冲刺板和其他板

无法使用服务主体从发布管道访问 Azure Devops Git 存储库

Azure DevOps 集合级别自定义组

azure devops 跨域