Kalenderabfrage Gerätepostfach per Powershell
Moin Exchange-Admins und Powershellmeister!
Ich würde gerne programmatisch zu einem Gerätepostfach auslesen können, von welchem Nutzer es gebucht ist, und bis wann.
Bislang habe ich noch kein passendes Kommando ausmachen können. Exchange ist ein 2016 CU9.
Ich würde gerne programmatisch zu einem Gerätepostfach auslesen können, von welchem Nutzer es gebucht ist, und bis wann.
Bislang habe ich noch kein passendes Kommando ausmachen können. Exchange ist ein 2016 CU9.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 382492
Url: https://administrator.de/contentid/382492
Ausgedruckt am: 17.11.2024 um 06:11 Uhr
7 Kommentare
Neuester Kommentar
Servus DWW,
machst du wie so oft über die Universalschnittstelle EWS. Ab EX2016 gibt es mitlerweile auch eine REST-API.
Bitte Voraussetzungen unter dem Skript beachten!
Im Beispiel werden alle Meetings deren Startdatum oder Enddatum größer Heute ist mit einigen Eigenschaften als Object zurückgeliefert.
(Variablen im Kopf: Exchange Server und Mailbox anpassen.)
Du benötigst die EWS DLL im selben Verzeichnis und der User der es ausführt muss über Impersonation-Rechte oder entsprechende Lese-Rechte auf der Mailbox am Exchange verfügen.
Es gelten also die selben Vorraussetzungen wie bei diesem Skript hier
Script odgl ausführen, wenn E-Mail eingeht
Grüße Uwe
machst du wie so oft über die Universalschnittstelle EWS. Ab EX2016 gibt es mitlerweile auch eine REST-API.
Bitte Voraussetzungen unter dem Skript beachten!
Im Beispiel werden alle Meetings deren Startdatum oder Enddatum größer Heute ist mit einigen Eigenschaften als Object zurückgeliefert.
(Variablen im Kopf: Exchange Server und Mailbox anpassen.)
# Start Variablen -------------------------------------------------------------------------
# FQDN Exchange Server
$exserver = "ex.domain.tld"
# E-Mail Adresse der Resource-Mailbox
$mailbox = "resourcemailbox@domain.tld"
# Ende Variablen -------------------------------------------------------------------------
if ($PSVersionTable.PSVersion.Major -lt 3){write-host "ERROR: Minimum Powershell Version 3.0 is required!" -F Yellow; return}
$ewspath = "$psscriptroot\Microsoft.Exchange.WebServices.dll"
if (!(Test-Path $ewspath)){
write-error "EWS DLL not found in script directory!"
return
}
# EWS DLL laden
Add-Type -Path $ewspath
# Allen Zertifikaten vertrauen
try{
Add-Type '
using System.Net;
using System.Security.Cryptography.X509Certificates;
public class TrustAllCertsPolicy : ICertificatePolicy {
public bool CheckValidationResult(
ServicePoint srvPoint, X509Certificate certificate,
WebRequest request, int certificateProblem) {
return true;
}
}
'
}catch{}
# Trust all certs policy dem ServicePointManager zuweisen
[System.Net.ServicePointManager]::CertificatePolicy = New-Object TrustAllCertsPolicy
# EWS Objekt erstellen
$ews = new-object Microsoft.Exchange.WebServices.Data.ExchangeService([Microsoft.Exchange.WebServices.Data.ExchangeVersion]::Exchange2010)
$ews.UseDefaultCredentials = $true
$ews.Url = "https://$exserver/ews/exchange.asmx"
$ews.ImpersonatedUserId = New-Object Microsoft.Exchange.WebServices.Data.ImpersonatedUserId([Microsoft.Exchange.WebServices.Data.ConnectingIdType]::SmtpAddress, $mailbox)
# -----------------------------
# Ergebnis Set-Einstellungen festlegen
$view = New-Object Microsoft.Exchange.WebServices.Data.ItemView(10000)
$view.PropertySet = New-Object Microsoft.Exchange.WebServices.Data.PropertySet([Microsoft.Exchange.WebServices.Data.BasePropertySet]::FirstClassProperties)
# Nur Meetings größer/gleich Heute
$filterStartDate = New-Object Microsoft.Exchange.WebServices.Data.SearchFilter+IsGreaterThanOrEqualTo([Microsoft.Exchange.WebServices.Data.AppointmentSchema]::Start,(get-date).Date)
# oder Meetings mit Enddatum größer Heute
$filterEndDate = New-Object Microsoft.Exchange.WebServices.Data.SearchFilter+IsGreaterThanOrEqualTo([Microsoft.Exchange.WebServices.Data.AppointmentSchema]::End,(get-date).Date)
# Die zwei Conditions zu einer FilterCollection hinzufügen
$filterCollection = New-Object Microsoft.Exchange.WebServices.Data.SearchFilter+SearchFilterCollection([Microsoft.Exchange.WebServices.Data.LogicalOperator]::Or,[Microsoft.Exchange.WebServices.Data.SearchFilter[]]($filterStartDate,$filterEndDate))
# Ergebnis Sortierung festlegen
$view.OrderBy.Add([Microsoft.Exchange.WebServices.Data.AppointmentSchema]::Start,[Microsoft.Exchange.WebServices.Data.SortDirection]::Descending)
# Kalender mit Einstellungen durchsuchen
$result = $ews.FindItems([Microsoft.Exchange.WebServices.Data.WellKnownFolderName]::Calendar,$filterCollection,$view)
# Gefundene Items im Kalender auflisten
$result.Items | select Subject,Start,End,Organizer,RequiredAttendees,OptionalAttendees | ft
Es gelten also die selben Vorraussetzungen wie bei diesem Skript hier
Script odgl ausführen, wenn E-Mail eingeht
Grüße Uwe
Zitat von @DerWoWusste:
Sag mal, Uwe, kannst Du das Skript noch ohne große Mühe (hoffentlich) erweitern, so dass es zusätzlich noch alle alten Buchungen ausgibt, deren Ende heute ist bzw. in der Zukunft?
Kein Problem, hab ich dir jetzt oben noch mit eingebaut. Mit der SearchFilterCollection lassen sich beliebig viele Suchfilter miteinander kombinieren.Sag mal, Uwe, kannst Du das Skript noch ohne große Mühe (hoffentlich) erweitern, so dass es zusätzlich noch alle alten Buchungen ausgibt, deren Ende heute ist bzw. in der Zukunft?