Hier mal wieder in kleines Script aus der Quick&Dirty Ecke. Abfragen des Kalenders eines Raumpostfachs per EWS und Powershell. Das Script holt alle Kalendereinträge ab dem aktuellen Zeitpunkt bis 365 Tage in die Zukunft, bzw. maximal 200 Einträge. Die Ergebnisse werden in der Variable $results gespeichert und können dann weiter verarbeitet werden.
$MailboxName = "Besprechungsraum@frankysweb.de" $EWSPath = "C:\Program Files\Microsoft\Exchange\Web Services\2.2\Microsoft.Exchange.WebServices.dll" Add-Type -Path $EWSPath $version = [Microsoft.Exchange.WebServices.Data.ExchangeVersion]::Exchange2010_SP2 $service = new-object Microsoft.Exchange.WebServices.Data.ExchangeService($version) $service.ImpersonatedUserId = new-object Microsoft.Exchange.WebServices.Data.ImpersonatedUserId([Microsoft.Exchange.WebServices.Data.ConnectingIdType]::SmtpAddress,$MailboxName); $service.AutodiscoverUrl($mailboxName) $calendar = [Microsoft.Exchange.WebServices.Data.Folder]::Bind($service,[Microsoft.Exchange.WebServices.Data.WellKnownFolderName]::Calendar) $calendarView = new-object Microsoft.Exchange.WebServices.Data.CalendarView([System.DateTime]::Now, [System.DateTime]::Now.AddDays(365)) $calendarView.MaxItemsReturned = 200; $calendarView.PropertySet = new-object Microsoft.Exchange.WebServices.Data.PropertySet([Microsoft.Exchange.WebServices.Data.BasePropertySet]::FirstClassProperties) $results = $calendar.FindAppointments($calendarView) $results | ft subject,start,end
Damit mittels EWS auf ein Raumpostfach zugegriffen werden kann, muss der Benutzer der das Script ausführt Impersonationsrechte haben. Um einem Benutzer Impersonationsrechte zuzuweisen kann der folgende Befehl verwendet werden:
New-ManagementRoleAssignment -Name impersonationAssignmentName -Role ApplicationImpersonation -User EWSServiceAccount
Damit erhält der Benutzer „EWSServiceAccount“ Impersonationsrechte auf allen Postfächern, dies lässt sich aber auch weiter eingrenzen:
New-ManagementScope -name Besprechungsraum -RecipientRestrictionFilter {Name –eq "Besprechungsraum"} New-ManagementRoleAssignment –Name impersonationAssignmentName –Role ApplicationImpersonation –User EWSServiceAccount –CustomRecipientWriteScope Besprechungsraum
Der Befehl oben erzeugt einen neuen Management Bereich der nur den Benutzer „Besprechungsraum“ enthält. Die Impersonationsrechte gelten also nur für den Benutzer EWSServiceAccount für das Postfach „Besprechungsraum“.
Das Script kann leider Inhalte eines Kalendereintrags nicht anzeigen, dazu muss FindItems statt FindAppointments verwendet werden.
Also die letzten zwei Zeilen durch diese drei ersetzen (getestet mit Exchange 2016):
$results = $service.FindItems($calendar.Id, $calendarView)
[Void]$Service.LoadPropertiesForItems($results, $calendarView.PropertySet)
$results | ft subject,start,end,location,Body
Hallo Gerd,
ich bekomme dann immer folgendes:
Exception calling „LoadPropertiesForItems“ with „2“ argument(s): „The collection is empty.
Parameter name: items“
At C:\Scripts\Manuell\Exchangekalender.ps1:19 char:1
+ [Void]$Service.LoadPropertiesForItems($results, $calendarView.Propert …
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : ArgumentException
Eine Idee?
Das Skiprt fukntioniert auch mit Exchange 2016 gut.
Was muss eingetragen werden um die Buchungen der letzte 365 Tage zusehen?
Einfach wie folgt anpassen:
([System.DateTime]::Now.AddDays(-365), [System.DateTime]::Now)
Hallo,
ich würde gerne die Raumbuchungen bei einem Exchange Server 2016 abrufen, funktioniert das Skript auch dafür?
Wenn ja, welche Version muss ich statt „Exchange2010_SP2“ angeben oder welche Änderungen wären noch erforderlich?
Viele Grüße,
Cedric
Ich musste nur folgende Zeilen anpassen:
$EWSPath = „C:\Program Files\Microsoft\Exchange Server\V15\Bin\Microsoft.Exchange.WebServices.dll“
$version = [Microsoft.Exchange.WebServices.Data.ExchangeVersion]::Exchange2016
Hallo,
kann man nicht auch einfach als „Besprechungsraum@frankysweb.de“ verbinden, statt Impersonationsrechte zu nutzen?
Hallo,
Raumpostfächer erlauben in der Standardkonfiguration keine Anmeldung, da der dazugehörige Benutzer deaktiviert ist. Auch wenn man innerhalb eines Script mehrere Kalender abfragen will, ist es einfacher mit Impersonation zu arbeiten, anstatt viele Kennwörter und Benutzernamen zu hinterlegen.
Gruß,
Frank