Azure自动化账户中Get-AzureADApplicationProxyApplication执行失败求助
解决方案与替代方法
空引用异常的核心原因
空引用问题大概率是Azure AD PowerShell模块在自动化账户环境中的兼容性问题,或是模块调用Graph API时的权限上下文差异。即便给托管标识分配了Azure AD角色,部分PowerShell cmdlet仍可能需要显式的Graph API应用权限,而非仅依赖角色权限。
替代方案:直接调用Microsoft Graph API获取证书信息
绕过PowerShell cmdlet的限制,直接调用Graph API查询应用代理的证书元数据,步骤如下:
为托管标识配置Graph API应用权限
- 给自动化账户的系统托管标识添加
Application.Read.All(应用权限),并完成管理员同意操作。该权限足以读取应用代理的证书信息。
- 给自动化账户的系统托管标识添加
在自动化Runbook中实现API调用
通过托管标识获取Graph访问令牌,再调用API查询目标应用的代理配置:# 获取托管标识的Graph访问令牌 $tokenAuthUri = $env:IDENTITY_ENDPOINT + "?resource=https://graph.microsoft.com&api-version=2019-08-01" $tokenResponse = Invoke-RestMethod -Method Get -Headers @{"X-IDENTITY-HEADER" = $env:IDENTITY_HEADER} -Uri $tokenAuthUri $accessToken = $tokenResponse.access_token # 遍历应用并提取证书过期日期 $apps = Get-AzureADApplication -All $true foreach ($item in $apps) { $graphUri = "https://graph.microsoft.com/v1.0/applications/$($item.ObjectId)/onPremisesPublishing" $proxyApp = Invoke-RestMethod -Method Get -Headers @{"Authorization" = "Bearer $accessToken"} -Uri $graphUri if ($proxyApp.verifiedCustomDomainCertificatesMetadata) { $certExpiry = $proxyApp.verifiedCustomDomainCertificatesMetadata.expirationDateTime Write-Output "应用 $($item.DisplayName) 的证书过期日期: $certExpiry" } }
额外排查与优化建议
- 若坚持使用
Get-AzureADApplicationProxyApplication,可在Runbook中先更新Azure AD模块版本(需确保自动化账户有模块安装权限):Install-Module AzureAD -Force -AllowClobber - 验证托管标识权限:在Azure门户的「Azure AD」→「企业应用」中找到自动化账户的托管标识,确认已分配的API权限状态为“已授予同意”。
内容的提问来源于stack exchange,提问作者Jack
相关产品推荐
相关产品推荐

