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 list
和az 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 中,由于权限问题,开发人员无法访问冲刺板和其他板