我正在尝试调用需要当前登录用户的 PrincipalId 的 ARM 模板。
https://learn.microsoft.com/en-us/azure/templates/microsoft.keyvault/vaults
我已经使用 powershell 登录,作为组织 AAD 中的来宾帐户。 当我检查结果上下文时,我得到:
Name : [[email protected], 5f813400-5b93-43b0-af8f-5fd04714f1ef]
Account : [email protected]
SubscriptionName : SomeSubscriptionName
TenantId : e6d2d4cc-b762-486e-8894-4f5f540d5f31
Environment : AzureCloud
我想知道如何从上面获取 AAD ObjectId,而不用字符串解析“Name”?
请注意,ARM 模板的文档不是很清楚,因此不确定 [email protected] 是否也能正常工作(我假设它在谈论 Guid)。
谢谢。
您也可以使用 azure cli 获取它
per @magnusnn 从 2.37.0 版本开始你需要使用
az ad signed-in-user show --query id -o tsv
az ad signed-in-user show --query objectId -o tsv
Get-AzureRmADUser
得到ObjectId
.
样品:
Get-AzureRmADUser -UserPrincipalName "[email protected]"
结果:
Id
就是ObjectId
,你可以得到它。另外,您可以通过其他属性获取它,而不仅仅是-UserPrincipalName
,只需参考命令的链接即可。
更新:
如果您使用
Guest
帐户,您可以尝试以下命令。
Get-AzureADUser | ?{$_.UserType -eq "Guest"} | ?{$_.UserPrincipalName -like "*partofyouraccount*"}
注意:在使用该命令之前,您需要安装Azure AD powershell模块.
您看到的“姓名”信息与订阅相关。使用下面的命令获取“Account”下的objectId:
(Get-AzContext).Account.ExtendedProperties.HomeAccountId.Split('.')[0]
我不是 AAD 专家,但我发现我自己的个人 Azure 订阅与我的工作无关,对于以下命令返回 nothing:
# does not work sometimes
(Get-AzADUser -UserPrincipalName (Get-AzContext).Account).Id
但是我发现我可以使用 Az CLI 可靠地获取我的用户主体名称 (UPN) 和对象 ID 以获取访问令牌,然后使用 Microsoft Graph API 返回用户信息。
$token = Get-AzAccessToken -Resource "https://graph.microsoft.com/"
$headers = @{ Authorization = "Bearer $($token.Token)" }
Invoke-RestMethod https://graph.microsoft.com/v1.0/me -Headers $headers
使用 Powershell cmdlet:
$myObjectId = (Get-AzADUser -UserPrincipalName (Get-AzContext).Account).Id