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:
Funktion zum erstellen des Kalendereintrags:
Aufruf der Funktion: (alles noch in entwicklung)
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)
}
}
}
}
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 11526432251
Url: https://administrator.de/contentid/11526432251
Ausgedruckt am: 22.11.2024 um 10:11 Uhr
4 Kommentare
Neuester Kommentar
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
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
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 .https://learn.microsoft.com/en-us/dotnet/api/microsoft.exchange.webservi ...
$appointment.Save($calendarId,[Microsoft.Exchange.WebServices.Data.SendInvitationsMode]::SendToNone)
Heute ist wieder RTFM Tag .
Gruß sid.