Graph API获取邮件收件人地址:PowerShell脚本问题排查
解决PowerShell提取Graph API邮件toRecipients字段的问题
问题根源
你脚本里的$EmailResponse = $EmailResponseFirst.value | Out-String是核心错误——Invoke-RestMethod返回的$EmailResponseFirst.value是邮件对象数组,用Out-String会把它转成纯文本字符串,后续foreach ($Email in $EmailResponse)遍历的是字符串的每个字符,根本不是邮件对象,自然取不到toRecipients属性,也就没输出。
修正后的代码
直接保留对象数组,不要转成字符串,然后正确遍历收件人:
$EmailQuery = "$GraphURI/users/myemail@example.com/mailboxFolders/MyFolder/messages" $EmailResponseFirst = Invoke-RestMethod -Method Get -Uri $EmailQuery -Headers @{Authorization = "Bearer $AccessToken"} -ContentType "application/json" # 直接保留对象数组,去掉Out-String $EmailResponse = $EmailResponseFirst.value foreach ($Email in $EmailResponse) { # toRecipients是数组,遍历每个收件人 foreach ($recipient in $Email.toRecipients) { if ($recipient.emailAddress -and $recipient.emailAddress.emailAddress) { Write-Host "收件人邮箱:" $recipient.emailAddress.emailAddress } } }
额外说明
- 之前输出的
toRecipients显示@{emailAddress=}是PowerShell对空对象的默认格式,实际有收件人的邮件中,emailAddress会包含具体邮箱地址。 - 加空值判断是为了避免无收件人的邮件导致脚本报错。
- 你之前写的
Write-Host "($Email.from | ConvertFrom-Json).odata.etag"完全多余——$Email已经是Invoke-RestMethod自动解析好的对象,不需要再ConvertFrom-Json,直接写Write-Host $Email.odata.etag就能正确输出ETag。
内容的提问来源于stack exchange,提问作者MDUB77
相关产品推荐
相关产品推荐

