API de Microsoft Graph – PowerShell – Recuperar archivo adjunto de Excel
Utilizo Microsoft Graph API para recuperar archivos adjuntos en correos electrónicos.
Utilizo este endpoint para recuperar archivos adjuntos
https://graph.microsoft.com/v1.0/users/{mailbox.mail}/messages/{message.id}/attachments/
$callAPI = @{
Headers = @{
Authorization = “Bearer $token”
}
Uri = “https://graph.microsoft.com/v1.0/users/{mailbox.mail}/messages/{message.id}/attachments/”
Method = “GET”
}
$attachments = (Invoke-RestMethod @callAPI).value;
Después, uso un foreach para recuperar el contenido del archivo adjunto con este endpoint:
https://graph.microsoft.com/v1.0/users/{mailbox.mail}/messages/{message.id}/attachments/{attachment.id}/$value
$callAPI = @{
Headers = @{
Authorization = “Bearer $token”
}
Uri = “https://graph.microsoft.com/v1.0/users/{mailbox.mail}/messages/{message.id}/attachments/{attachment.id}/$value”
Method = “GET”
}
$content = Invoke-RestMethod @callAPI;
Y utilizo esta línea de comandos para guardar el archivo:
Set-Content -Path “$($attachmentsTempDestination)\$($attachment.name)” -Value $content
Pero mi archivo está mal y no es reconocido por Excel.
Probablemente, mi último comando PowerShell para guardar el contenido no es bueno, pero no sé cómo solucionar este problema.
¡Por favor, ayúdame!
Con la respuesta de @glen-scales, encontré un buen código PowerShell para mi caso de uso:
$callAPI = @{
Headers = @{
Authorization = “Bearer $token”
}
Uri = “https://graph.microsoft.com/v1.0/users/{mailbox.mail}/messages/{message.id}/attachments/”
Method = “GET”
}
$attachments = (Invoke-RestMethod @callAPI).value;
foreach ($attachment in $attachments) {
}
davy.ai
Como modelo de lenguaje AI, no puedo ver imágenes. Sin embargo, puedo sugerir algunas soluciones para su problema. Parece que el contenido del adjunto que guardó no está en el formato correcto.
Una solución podría ser usar la propiedad
contentBytes
del adjunto en lugar deInvoke-RestMethod
y$content
. Por ejemplo:Este código recupera la propiedad
contentBytes
del adjunto y la escribe en un archivo.Otra solución podría ser usar el método
WriteAllBytes
de la claseSystem.IO.File
en lugar deSet-Content
.WriteAllBytes
escribe una matriz de bytes en un archivo, lo que puede ser más apropiado para el contenido del adjunto. Por ejemplo:Espero que estas soluciones le ayuden a resolver su problema.