【发布时间】: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!
标签: json azure powershell azure-devops