如何在Azure PowerShell中判断登录身份类型并获取对应ObjectId
Azure PowerShell获取当前登录身份类型及ObjectId方法
实现步骤
- 首先通过
Get-AzContextcmdlet获取当前活跃的Azure登录上下文,提取账号类型和唯一标识字段 - 根据账号类型判断是普通用户还是服务主体,调用对应AD查询接口获取ObjectId
完整可运行脚本
# 获取当前登录上下文 $currentContext = Get-AzContext $account = $currentContext.Account $tenantId = $currentContext.Tenant.Id # 初始化返回结果对象 $result = [PSCustomObject]@{ IdentityType = $account.Type ObjectId = $null TenantId = $tenantId } switch ($account.Type) { # 普通用户类型 "User" { $user = Get-AzADUser -UserPrincipalName $account.Id $result.ObjectId = $user.Id break } # 服务主体类型 "ServicePrincipal" { $sp = Get-AzADServicePrincipal -ApplicationId $account.Id $result.ObjectId = $sp.Id break } default { throw "不支持的身份类型: $($account.Type)" } } # 输出结果 $result
实际使用示例
如果需要直接获取ObjectId用于配置Key Vault访问策略,可直接调用以下代码:
# 直接获取当前身份ObjectId(PowerShell 7+ 版本适用) $currentObjectId = (Get-AzADServicePrincipal -ApplicationId (Get-AzContext).Account.Id -ErrorAction SilentlyContinue)?.Id ?? (Get-AzADUser -UserPrincipalName (Get-AzContext).Account.Id).Id # 配置Key Vault访问策略示例 Set-AzKeyVaultAccessPolicy -VaultName "替换为你的KeyVault名称" -ObjectId $currentObjectId -PermissionsToSecrets Get,List,Set
如果你使用的是PowerShell 5.1,不支持
??空合并运算符,可替换为如下判断逻辑:$contextAccount = (Get-AzContext).Account if ($contextAccount.Type -eq 'ServicePrincipal') { $currentObjectId = (Get-AzADServicePrincipal -ApplicationId $contextAccount.Id).Id } else { $currentObjectId = (Get-AzADUser -UserPrincipalName $contextAccount.Id).Id }
注意事项
- 运行脚本前需先执行
Connect-AzAccount完成Azure登录,确保当前上下文有效 - 运行账号需具备对应AD资源的读取权限,查询服务主体时至少要有目录读取权限
内容的提问来源于stack exchange,提问作者Kai Walter
相关产品推荐
相关产品推荐

