有没有办法获取当前正在Azure DevOps中执行Azure PowerShell任务的服务主体的ObjectId?
我正在创建资源,然后想要为“当前”用户应用权限。.但无法解决如何获取当前用户ObhectId / ApplicationId
这可能吗?
答案 0 :(得分:0)
您可以使用以下powershell cmdlet:
Get-AzContext | Select -ExpandProperty Account
答案 1 :(得分:0)
执行此操作的方式似乎有两种,具体取决于它是用户还是服务主体:-
Get-AzADUser
Get-AzADServicePrincipal
我认为这些是在Az.Resources
模块中。因此,为您提供ObjectId(用于权限),您可以采用两步方法,如下所示:
$x = (Get-AzContext).Account.Id
$x
> df6fc4f6-cb05-4301-91e3-11d93d7fd43d # ApplicationId
$y = Get-AzADServicePrincipal -ApplicationId $x
$y.Id
> c3588e6a-b48b-4111-8241-3d6bd726ca40 # ObjectId
我无法让标准用户可靠地正常工作..如果您的用户是直接在AzureAD中创建的,而不是在外部(例如gmail.com,outlook.com等)创建的,这应该工作:
$x = (Get-AzContext).Account.Id
$x
> sample@your-domain.onmicrosoft.com # UserPrincipalName
$y = Get-AzADUser -UserPrincipalName $x
$y.Id
> c5d4339b-48dc-4190-b9fb-f5397053844b # ObjectId
如果您的用户是外部用户,并且拥有your.email.address_outlook.com#EXT#@your-domain.onmicrosoft.com
这样的UserPrincipalName
字眼,那么您需要通过一些字符串操作来解决这个问题,我想?。
但是!无论如何,您都不应该使用用户帐户来编写脚本,因此probably没关系。
注意:我尚未在Azure DevOps中尝试过此操作,您可能需要升级PowerShell程序包,但我认为应该与Get-AzureRmADUser和Get-AzureRmADServicePrincipal存在相同的命令。请让我知道。
答案 2 :(得分:0)
好吧-基于以上内容,我做了一个小功能-在很多情况下都可以使用:
function Get-CurrentUserObjectID {
$ctx = Get-AzContext
#This is different for users that are internal vs external
#We can use Mail for users and guests
$User = Get-AzADUser -Mail $ctx.Account.id
if (-not $user) { #Try UPN
$User = Get-AzADUser -UserPrincipalName $ctx.Account.Id
}
if (-not $User) { #User was not found by mail or UPN, try MailNick
$mail = ($ctx.Account.id -replace "@","_" ) + "#EXT#"
$User = Get-AzADUser | Where-Object { $_MailNick -EQ $Mail}
}
Return $User.id
}