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-ID: 11526432251

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

Ausgedruckt am: 22.11.2024 um 10:11 Uhr

SachsenHessi
SachsenHessi 27.09.2023 um 13:31:38 Uhr
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
skoobmin
skoobmin 27.09.2023 um 13:33:53 Uhr
Goto Top
das weiß ich bei 365 und exchange online ;) wir nutzen erstmal on premise weiter aber bin schon an graph dran
7907292512
Lösung 7907292512 27.09.2023 aktualisiert um 13:40:53 Uhr
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.
skoobmin
skoobmin 28.09.2023 um 07:54:31 Uhr
Goto Top
Danke sid ich habs einfach nicht gesehen ^^