You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Invoke-RestMethod调用MS Graph时UTF-8编码失效问题

解决Microsoft Graph API邮件活动报告的PowerShell乱码问题

出现İç test01 Bölge)这类乱码,本质是UTF-8编码的响应被PowerShell错误地用Windows-1252/ISO-8859-1解码了。Invoke-RestMethod会自动推断响应编码,遇到带BOM的UTF-8内容时容易识别错误,导致乱码。

直接用以下方案修复:

改用Invoke-WebRequest获取原始响应并手动解码UTF-8

放弃Invoke-RestMethod,用Invoke-WebRequest拿到原始字节流,再用UTF-8编码解码,从根源解决编码不匹配问题:

$appid = 'APPID'
$tenantid = 'TENANTID'
$secret = 'SECRETID'
 
$body =  @{
    Grant_Type    = "client_credentials"
    Scope         = "https://graph.microsoft.com/.default"
    Client_Id     = $appid
    Client_Secret = $secret
}
$ConnectionParameters=@{ 
    Uri="https://login.microsoftonline.com/$tenantid/oauth2/v2.0/token"
    Method ="POST"
    Body = $body
}
$connection = Invoke-RestMethod @ConnectionParameters
 
$token = $connection.access_token
# Connect-MgGraph可按需保留,获取报告不强制依赖该连接
# Connect-MgGraph -AccessToken $token

$headers = @{"Authorization" = "Bearer "+ $token} 
$uri = "https://graph.microsoft.com/v1.0/reports/getEmailActivityUserDetail(period='D7')"

# 核心修复:获取原始响应字节流,手动用UTF-8解码
$response = Invoke-WebRequest -Uri $uri -Headers $headers
$usermailactivitydetail = [System.Text.Encoding]::UTF8.GetString($response.Content)

# 移除UTF-8 BOM(如果存在),再转换为CSV对象
$result = $usermailactivitydetail -replace '^\uFEFF', ''
$resultarray = ConvertFrom-Csv -InputObject $result

# 导出CSV时指定UTF-8编码,避免二次乱码
$resultarray | Export-Csv "C:\output.csv" -NoTypeInformation -Encoding UTF8

为什么之前的方法无效?

你之前替换Report Refresh Date的操作只是移除了BOM的字符表现,但Invoke-RestMethod已经把整个响应内容用错误的编码解码成了字符串,乱码已经产生,后续替换无法逆转编码错误。必须在获取响应的阶段就用正确的编码解码原始字节流。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 10:55:17