es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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) {
}

Tags:  , , ,

Answer

  1. Avatar for 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 de Invoke-RestMethod y $content. Por ejemplo:

    $attachmentContentBytes = (Invoke-RestMethod -Headers $headers -Uri $attachment["@microsoft.graph.downloadUrl"] -Method Get).content
    [System.IO.File]::WriteAllBytes("$($attachmentsTempDestination)\$($attachment.name)", [System.Convert]::FromBase64String($attachmentContentBytes))
    

    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 clase System.IO.File en lugar de Set-Content. WriteAllBytes escribe una matriz de bytes en un archivo, lo que puede ser más apropiado para el contenido del adjunto. Por ejemplo:

    [System.IO.File]::WriteAllBytes("$($attachmentsTempDestination)\$($attachment.name)", $content)
    

    Espero que estas soluciones le ayuden a resolver su problema.

Comments are closed.