powershell - PS script that is supposed to print attachments from unread emails - Stack Overflow

admin2025-04-04  0

I'm working on a PS script that connects with Microsoft Graph that prints attachments from unread emails in the inbox folder. Everything is working except the part where it only prints from unread emails. I've italicized the line I believe is the issue. I have tried playing around with the line in question, but nothing I've tried seems to work.

# Install Microsoft Graph PowerShell module if not already installed
if (-not (Get-Module -ListAvailable -Name Microsoft.Graph)) {
    Install-Module Microsoft.Graph -Scope CurrentUser -Force
}

# Define Azure App Credentials
$tenantId = "0000000000000000000000000000"
$clientId = "000000000000000000000000000000000"
$clientSecret = "00000000000000000000000000000000000"
$sharedMailbox = "[email protected]"

# Get Access Token
$body = @{
    grant_type    = "client_credentials"
    client_id     = $clientId
    client_secret = $clientSecret
    scope         = "/.default"
} 

$tokenResponse = Invoke-RestMethod -Uri "/$tenantId/oauth2/v2.0/token" -Method Post -Body $body
$accessToken = $tokenResponse.access_token

# Fetch Emails from Shared Mailbox
$headers = @{
    Authorization = "Bearer $accessToken"
    "Content-Type" = "application/json"
}

*$mailUrl = ".0/users/$sharedMailbox/mailFolders/inbox/messages?$filter=isRead -eq $false"*
$mails = Invoke-RestMethod -Uri $mailUrl -Headers $headers -Method Get

# Loop through emails and process attachments
foreach ($mail in $mails.value) {
    $mailId = $mail.id
    $attachmentsUrl = ".0/users/$sharedMailbox/messages/$mailId/attachments"
    $attachments = Invoke-RestMethod -Uri $attachmentsUrl -Headers $headers -Method Get

    foreach ($attachment in $attachments.value) {
        if ($attachment."@odata.type" -eq "#microsoft.graph.fileAttachment") {
            $fileName = $attachment.name
            $fileContent = [System.Convert]::FromBase64String($attachment.contentBytes)
            $filePath = "$env:TEMP\$fileName"

            # Save attachment
            [System.IO.File]::WriteAllBytes($filePath, $fileContent)
            Write-Output "Downloaded: $filePath"

            # Print the file
            Start-Process -FilePath $filePath -Verb Print

            
        }
    }

    


    $markAsReadUrl = ".0/users/$sharedMailbox/messages/$mailId"
    $markAsReadBody = @{ isRead = $true } | ConvertTo-Json
    Invoke-RestMethod -Uri $markAsReadUrl -Headers $headers -Method Patch -Body $markAsReadBody

}

Write-Host "Processing Completed"
转载请注明原文地址:http://conceptsofalgorithm.com/Algorithm/1743757942a217728.html

最新回复(0)