首页 > 解决方案 > Microsoft GraphAPI PowerShell 下载附件

问题描述

如何从 Microsoft Graph API for Mail 消息下载附件?

'$attachment=Get-MgUserMessageAttachment -MessageId AAMkAGIzZWEyN2MxLWJmNTktNDBkMi05ZWY2LWE3YjFhYWJjNmEwOABGAAAAAAA2OVriHzx8TL2ku-KbIgYgBwChRsRs-pG2QpRCaG5OA-T0FcAAA= -UserId abcd@gmail.com

$attachment
ContentType          : application/octet-stream
Id                   : AAMkAGIzZWEyN2MxLWJmNTktNDBkMi05ZWY2LWE3YjFhYWJjNmEwOABGAAAAAAA2OVriHzx8TL2ku-KbIgYgBwChRsRs-pG2QpRCaG5OgRLxAAAAAAEMAAChRsRs-pG2QpRCaG5OgRLxAAA-T0FcAAABEg
                       AQANUHCnnWvO5Dr-D2VilhKP8=
IsInline             : False
LastModifiedDateTime : 4/14/2020 7:21:32 PM
Name                 : report.csv
Size                 : 707'

标签: powershellmicrosoft-graph-api

解决方案


Microsoft 图形 API 基于 Web API。因此,如果要下载附件,可以直接使用 HTTP GET命令和Microsoft Graph API Get Attachment API。

在 PowerShell 中,如果您想在本地使用 HTTP 调用,可以使用Invoke-WebRequest(有关更多详细信息,您可以查看如何在 PowerShell 中使用 HTTP GET?)。

但是 Microsoft 提供了一些工具(模块)来使 Microsoft Graph API 在 PowerShell 中易于使用。也就是说Microsoft.Graph模块。该模块处于预览阶段,但非常有用。

如果您想使用此模块并下载附件,可以使用以下命令:

Get-MgUserMessageAttachment -MessageId <String> -UserId <String> [-Count] [-Expand <String[]>]
 [-Filter <String>] [-Orderby <String[]>] [-Search <String>] [-Select <String[]>] [-Skip <Int32>]
 [-Top <Int32>] [<CommonParameters>]

有关此命令的详细信息,您可以查看Microsoft Graph SDK PowerShell文档。

Get-MgUserMessageAttachment返回IMicrosoftGraphAttachment具有如下一些属性(JSON 表示):

{
  "contentType": "string",
  "id": "string (identifier)",
  "isInline": true,
  "lastModifiedDateTime": "String (timestamp)",
  "name": "string",
  "size": 1024
}

但是这种类型是基于类型的fileAttachment,具有如下一些属性(JSON 表示):

{
  "contentBytes": "string (binary)",
  "contentId": "string",
  "contentLocation": "string",
  "contentType": "string",
  "id": "string (identifier)",
  "isInline": true,
  "lastModifiedDateTime": "String (timestamp)",
  "name": "string",
  "size": 1024
}

对于文件下载,您可以使用该ContentBytes属性。此属性是Base64编码的,因此您必须对其进行解码,然后使用一些命令(例如Out-File )保存到文件中。

正如您在PowerShell Module的 GitHub 存储库中看到的,在此 PowerShell 的当前状态下,您无法直接使用它与此 SDK 一起下载附件,您必须直接在 PowerShell 中使用 Web API 来下载附件。


推荐阅读