You need to enable JavaScript to run this app. 如何在Azure PowerShell中判断登录身份类型并获取对应ObjectId
优惠活动
大模型
产品
解决方案
定价
更多

如何在Azure PowerShell中判断登录身份类型并获取对应ObjectId

Azure PowerShell获取当前登录身份类型及ObjectId方法

实现步骤

  • 首先通过Get-AzContext cmdlet获取当前活跃的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.13 15:54:04