You need to enable JavaScript to run this app. PowerShell调用Graph API V1.0获取O365激活报告时Invoke-WebRequest报错
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell调用Graph API V1.0获取O365激活报告时Invoke-WebRequest报错

PowerShell调用Graph O365激活报告接口报错排查

常见报错原因与修复方案

  • TLS 版本不兼容
    旧版 Windows PowerShell 默认仅启用 TLS 1.0/1.1 协议,而 Microsoft Graph API 已强制要求 TLS 1.2 及以上版本,不满足版本要求的请求会直接触发底层连接中断,返回「基础连接已关闭」的错误,该报错不会进入接口权限校验环节。
    修复方式为在脚本最开头添加代码强制启用 TLS 1.2:
    [Net.ServicePointManager]::SecurityProtocol = [Net.ServicePointManager]::SecurityProtocol -bor [Net.SecurityProtocolType]::Tls12

  • 请求头配置冗余
    你在请求头中额外添加了Content-type: application/json声明,对于GET请求和CSV流式返回的报告接口来说,该头信息无实际作用,部分场景下会触发服务端的请求校验异常。
    修复方式为获取token后,请求头仅保留Authorization字段即可。

  • 应用权限配置缺失
    使用 client_credentials 模式调用报告接口时,需要给对应Azure AD应用授予应用类型的Reports.Read.All权限,且必须完成全局管理员同意操作。如果权限未授权或未完成同意,部分场景下Graph API不会返回标准403错误,而是直接中断连接,和当前报错表现一致。

  • 请求头传递逻辑隐患
    你通过管道筛选全局对象的方式获取请求头,如果租户ID拼写不匹配、全局对象作用域异常,会导致传入空的请求头,直接触发连接中断。
    修复方式为获取请求头后先做非空校验,确认有效后再发起请求。

修复后可正常运行的脚本示例

# 强制启用TLS 1.2,解决底层连接报错
[Net.ServicePointManager]::SecurityProtocol = [Net.ServicePointManager]::SecurityProtocol -bor [Net.SecurityProtocolType]::Tls12

function getToken()
{
    param()
    $global:appreg = @()
    $global:appreg +=[pscustomobject]@{tenantId="****";appID="****";secret="****";headers=""}
    $global:appreg | ForEach-Object {
        $appreg = $_
        $ReqTokenBody = @{
            Grant_Type    = "client_credentials"
            Scope         = "https://graph.microsoft.com/.default"
            client_Id     = $appreg.appID
            Client_Secret = $appreg.secret
        } 
        $TokenResponse = iwr -Uri "https://login.microsoftonline.com/$($appreg.tenantId)/oauth2/v2.0/token" -Method POST -Body $ReqTokenBody
        $accesstoken = ($TokenResponse | ConvertFrom-Json).access_token
        # 移除冗余的Content-Type请求头
        $appreg.headers = @{'Authorization' = 'Bearer ' + $accesstoken}
    }
}

$mainTenandID = "****"
$reportUri = "https://graph.microsoft.com/v1.0/reports/getOffice365ActivationsUserDetail"

getToken 
# 校验请求头有效性
$targetHeaders = ($global:appreg | Where-Object {$_.tenantID -eq $mainTenandID}).headers
if (-not $targetHeaders) {
    throw "未匹配到对应租户的有效请求头,请检查租户ID配置"
}

# 发起报告请求,返回内容为CSV格式
$reportResponse = iwr -Uri $reportUri -Method Get -Headers $targetHeaders
# 导出为本地CSV文件
$reportResponse.Content | Out-File -FilePath "O365ActivationsUserDetail.csv" -Encoding UTF8

原报错信息:Invoke-RestMethod:基础连接已关闭:发送时出现意外错误。


内容的提问来源于stack exchange,提问作者ld420

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.26 06:45:03