Jump to content

Gebucht-Status eines Raumpostfachs auslesen - Exchange 2016


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Hallo zusammen,

 

ich habe in Exchange 2016 ein Raumpostfach erstellt. Nun möchte ich auslesen, ob es gebucht ist oder nicht. Leider kenne ich mich mit EWS oder was man dafür braucht, nicht aus und bitte daher um eure Hilfe, wie man das Ganze, z. B. als Powershell-Skript (wird auf dem Server ausgeführt), realisieren kann.

 

Natürlich habe ich schon mal die Google-Suche bemüht und bin dabei u. a. auf ein recht vielversprechend aussehendes Skript gestoßen: https://www.frankysweb.de/exchange-20102013-kalender-eines-raumpostfachs-mit-ews-abfragen/

Beim Versuch, es entsprechend anzupassen und schließlich auszuführen, bin ich aber auf Probleme gestoßen:

$MailboxName = "Besprechungsraum-KS@proj-cl.hessenmobil.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]::Exchange2016 
  
$service = new-object Microsoft.Exchange.WebServices.Data.ExchangeService($version)  
$service.ImpersonatedUserId = new-object Microsoft.Exchange.WebServices.Data.ImpersonatedUserId([Microsoft.Exchange.WebServices.Data.ConnectingIdType]::,$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 = 5;
$calendarView.PropertySet = new-object Microsoft.Exchange.WebServices.Data.PropertySet([Microsoft.Exchange.WebServices.Data.BasePropertySet]::FirstClassProperties)
 
$results = $calendar.FindAppointments($calendarView)
 
$results | ft subject,start,end

In der vierten Zeile habe ich als ExchangeVersion einfach "Exchange2016" angegeben, allerdings ohne zu wissen, ob das so richtig ist (vermutlich nicht :frown:).

Jedenfalls erscheinen bei der Ausführung des Skripts in der Exchange-Konsole zwei Fehlermeldungen:

 

Skript_Angepasst_ausgefuehrt.PNG.ada87af9e4d9965cf3e9d6c45437816f.PNG

 

Danke schon mal für eure Hilfe.

 

Viele Grüße,

Cedric

 

Link zu diesem Kommentar

Objekt sind kein Wunschkonzert. Da muss man im Zweifel schon nachschlagen. ;-)

 

Die genannte „Version“ muss nicht zum Exchange passen, laut Microsoft Dokumentation. Heißt für Dich: Einfach stehen lassen was stand :-) 

 

https://docs.microsoft.com/de-de/dotnet/api/microsoft.exchange.webservices.data.exchangeversion?view=exchange-ews-api

Link zu diesem Kommentar

Danke für eure schnellen Antworten!

vor 3 Stunden schrieb Nobbyaushb:

Mir fehlt die Zeile mit der Impersonation

 

Mal abwarten, was Franky dir antwortet.

 

Die Impersonation hatte ich vorher schon ausgeführt:DSC_7145_impersonation.thumb.JPG.509943c41003246162e3b62da29311b6.JPG.

Bin ich auch mal gespannt, ob bzw. was er antwortet..

 

vor 2 Stunden schrieb MurdocX:

Objekt sind kein Wunschkonzert. Da muss man im Zweifel schon nachschlagen. ;-)

 

Die genannte „Version“ muss nicht zum Exchange passen, laut Microsoft Dokumentation. Heißt für Dich: Einfach stehen lassen was stand :-) 

 

https://docs.microsoft.com/de-de/dotnet/api/microsoft.exchange.webservices.data.exchangeversion?view=exchange-ews-api

Ok, dann will ich das mal probieren (mangels Remote-Zugriff leider erst am Montag :sauer:).

Ich hatte die verlinkte Seite auch gefunden, konnte mir aber keinen Reim drauf machen und hätte eher vermutet, dass Exchange 2016 oder neuer vielleicht nicht unterstützt wird..

bearbeitet von Cedric
Ergänzung
Link zu diesem Kommentar

So, ich konnte es nun ausprobieren und habe entsprechend @MurdocX's Vorschlag aus Exchange2016 wieder Exchange2010_SP2 gemacht:

$MailboxName = "besprechungsraum-ks@xxxx"
$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]::,$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 = 5;
$calendarView.PropertySet = new-object Microsoft.Exchange.WebServices.Data.PropertySet([Microsoft.Exchange.WebServices.Data.BasePropertySet]::FirstClassProperties)
 
$results = $calendar.FindAppointments($calendarView)
 
$results | ft subject,start,end

 

Es sieht zwar schon besser aus, aber die Fehlermeldung "Ausnahme beim Aufrufen von "Bind" mit 2 Argumenten: "The Id property must be set."" bleibt leider Bestehen.

Darunter habe ich $service mal ausgegeben, kann der ImpersonatedUserId-Eintrag so stimmen? Eigentlich soll ja der User "Administrator" impersonated sein und ein entsprechendes Objekt ist ja auch bereits erstellt (s. o.). :hmmm:

 

2019026209_Skript_Angepasst_ausgefhrt.PNG.6181a1c1c4f182ed7f54a52bb9e0dd87.PNG

 

Link zu diesem Kommentar
vor 15 Minuten schrieb MurdocX:

Vor der Impersonifizierung hast du ein '#' gesetzt. Zeile 10 von Oben. Das steht für ein Kommentar. Ich kann Dir übrigens die ISE an Herz legen, denn dann musst du nicht über "Copy & Paste" arbeiten. 

Ups, ja das war ein Test, den ich zwischendurch mal im Code drin hatte. Hat aber nicht funktioniert.

Ich habe das Ganze ja in der ISE, aber ich muss den Code doch in der Exchange Management Shell ausführen, oder?

 

vor 13 Minuten schrieb Dukel:

Oder gleich VS-Code.

Die ISE wird nicht mehr weiter entwickelt.

Wäre mir an sich auch recht, nur wie muss ich da vorgehen?

bearbeitet von Cedric
Link zu diesem Kommentar
vor 38 Minuten schrieb MurdocX:

Hier hast du etwas entfernt aber nicht wieder hinzugefügt....

 

ConnectingIdType:: ????

 

Schau Dir mal das Original an ;-) 

Zitat

$service.ImpersonatedUserId = new-object Microsoft.Exchange.WebServices.Data.ImpersonatedUserId([Microsoft.Exchange.WebServices.Data.ConnectingIdType]::SmtpAddress,$MailboxName);

Habe ich gemacht, vielen Dank!

Nun funktioniert es auch auf einmal. :D:lol2:

Link zu diesem Kommentar

https://docs.microsoft.com/en-us/powershell/scripting/components/ise/introducing-the-windows-powershell-ise?view=powershell-6

Quote

The ISE was first introduced with Windows PowerShell V2 and was re-designed with PowerShell V3. The ISE is supported in all supported versions of Windows PowerShell up to and including Windows PowerShell V5.1. The ISE, however, is in maintenance mode and no new features are likely to be added. Additionally, there is no support for the ISE with PowerShell v6 and beyond. Users wanting a graphical tool with which to manage PowerShell scripts, etc, should consider Visual Studio Code.

 

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...