Azure DevOps获取当前用户ObjectId

时间:2019-06-18 18:36:52

标签: powershell azure-devops

有没有办法获取当前正在Azure DevOps中执行Azure PowerShell任务的服务主体的ObjectId?

我正在创建资源,然后想要为“当前”用户应用权限。.但无法解决如何获取当前用户ObhectId / ApplicationId

这可能吗?

3 个答案:

答案 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
}