skoobmin
Goto Top

Powershell EWS Kalendereintrag aus Mail erstellen

Hi liebe Admins,,

ich habe ein Powershell-Script geschrieben in dem ich Einen Outlook Kalender auf verschiedenste Art und Weise bediene. Ich bin aktuell dabei aus einer empfangenen Email einen Kalendereintrag generieren zu lassen. Leider legt er den Eintrag in meinem persönlichen Postfach an und nicht in dem mitgegebenen Kalender. Habt ihr vielleicht eine Idee wieso?

Mainscriptauszug:

$Error.Clear()
#-------------------------------------------------------------------------------------------------------------------------------------------
# Script zum Laden und Vergleichen von Outlook-Kalenderdaten
#-------------------------------------------------------------------------------------------------------------------------------------------
# Festlegung des Arbeitsverzeichnisses
$scriptDirectory = Split-Path -Parent $MyInvocation.MyCommand.Path
Set-Location -Path $scriptDirectory

# Outlook-Kalendername
$mailboxName = "Wartungskalender_PF@abc.de"  

# Wie weit das Script in die Zukunft schaut
$zukunfttage = 30

# Pfad zur EWS-Datei
$EWSPath = Join-Path $scriptDirectory "lib\Microsoft.Exchange.WebServices.dll"  
$HtmlAgilityPack = Join-Path $scriptDirectory "lib\Net40\HtmlAgilityPack.dll"  

# Einbinden der EWS-Module
Import-Module $HtmlAgilityPack
Import-Module $EWSPath
Add-Type -Path $EWSPath
$version = [Microsoft.Exchange.WebServices.Data.ExchangeVersion]::Exchange2015_SP2
$service = New-Object Microsoft.Exchange.WebServices.Data.ExchangeService($version)
$service.AutodiscoverUrl($mailboxName)

Funktion zum erstellen des Kalendereintrags:
# Funktion zum Erstellen eines Kalendereintrags
function CreateCalendarEntry($subject, $body, $start, $end, $category) {
    $calendarId = new-object Microsoft.Exchange.WebServices.Data.FolderId([Microsoft.Exchange.WebServices.Data.WellKnownFolderName]::Calendar, $mailboxName)
    Write-Host $service
    $appointment = New-Object Microsoft.Exchange.WebServices.Data.Appointment($service)
    $appointment.Subject = $subject
    #$appointment.Body = $body
    $appointment.Start = $start
    $appointment.End = $end
    $appointment.Categories.Add($category)
    $appointment.Save([Microsoft.Exchange.WebServices.Data.SendInvitationsMode]::SendToNone)
}

Aufruf der Funktion: (alles noch in entwicklung)

function GF-MailtoCal {
       
    #$Inbox = [Microsoft.Exchange.WebServices.Data.WellKnownFolderName]::Inbox, $mailboxName
    #$Inbox = new-object Microsoft.Exchange.WebServices.Data.Inbox([Microsoft.Exchange.WebServices.Data.WellKnownFolderName]::Inbox, $mailboxName)
    $Inbox = new-object Microsoft.Exchange.WebServices.Data.FolderId([Microsoft.Exchange.WebServices.Data.WellKnownFolderName]::Inbox, $mailboxName)
    $Viewmail = New-Object Microsoft.Exchange.WebServices.Data.ItemView(50)  # Anzahl der Nachrichten anpassen
    

    $EmailItems = $service.FindItems($Inbox, $Viewmail)
    #echo $EmailItems.Items
    #Write-Host $FindResults
    foreach ($Email in $EmailItems.Items) {
        #Write-Host "DIE EMAIL IST: $Email"  
        $MailSubject = $Email.Subject
        $MailBody = $Email.Body.Text
        $MailIsRead = $Email.IsRead
        $SenderAddress = $Email.From.Address.ToLower()
        $starttime = "26.09.2023 10:00:00"  
        $endtime = "26.09.2023 10:00:00"  
        $dateTimestart = [DateTime]::ParseExact($starttime, "dd.MM.yyyy HH:mm:ss", $null)  
        $dateTimeend = [DateTime]::ParseExact($endtime, "dd.MM.yyyy HH:mm:ss", $null)  
        
        if ($MailIsRead -match "False" -and $MailSubject -notmatch "AW:" -and $MailSubject -notmatch "FW:"){  
        
            # Überprüfen, ob die E-Mail von Team1 stammt
            if ($SenderAddress -eq "ich@abc.de") {  
                Write-Host "Das Subject der Mail ist: $MailSubject"  
                Write-Host "Sauber - Markus hat geschrieben"  
                CreateCalendarEntry $MailSubject "" $dateTimestart $dateTimeend "Kat1"  


                # E-Mail als gelesen markieren
                #$Email.IsRead = $true
                #$Email.Update([Microsoft.Exchange.WebServices.Data.ConflictResolutionMode]::AlwaysOverwrite)
                
            }
        }

    }
    
}

Content-Key: 11526432251

Url: https://administrator.de/contentid/11526432251

Printed on: July 18, 2024 at 20:07 o'clock

Member: SachsenHessi
SachsenHessi Sep 27, 2023 at 11:31:38 (UTC)
Goto Top
Hallo,
Nur mal so am Rande OT:
EWS wird es nicht mehr lange geben.
MS-GRAPH wird der Nachfolger.
(https://granikos.eu/aenderungen-beim-exchange-online-web-services/)
SH
Member: skoobmin
skoobmin Sep 27, 2023 at 11:33:53 (UTC)
Goto Top
das weiß ich bei 365 und exchange online ;) wir nutzen erstmal on premise weiter aber bin schon an graph dran
Mitglied: 7907292512
Solution 7907292512 Sep 27, 2023 updated at 11:40:53 (UTC)
Goto Top
Leider legt er den Eintrag in meinem persönlichen Postfach an und nicht in dem mitgegebenen Kalender.
Du übergibst den Ordner der SharedMailbox der Save-Methode nicht ergo speichert er das im eigenen Kalender face-smile.
https://learn.microsoft.com/en-us/dotnet/api/microsoft.exchange.webservi ...
$appointment.Save($calendarId,[Microsoft.Exchange.WebServices.Data.SendInvitationsMode]::SendToNone)
Berechtigungen des ausführenden Accounts auf die SharedMailbox sind natürlich nötig!

Heute ist wieder RTFM Tag face-big-smile.

Gruß sid.
Member: skoobmin
skoobmin Sep 28, 2023 at 05:54:31 (UTC)
Goto Top
Danke sid ich habs einfach nicht gesehen ^^