Export-ExchangeUserPhoto

Die „Geschichte“  der Personen-Bilder ist wechselhaft. Erst war es ein zu kleinen Feld im AD, dann ein größeres Feld während parallel in SharePoint in der MySite auch Platz für ein Bild war und ein Replikationsdienst diese mit dem AD abgleichen konnte. Mit AzureAD on Office 365 was wohl absehbar, dass hochauflösende Bilder als LDAP-Property problematisch waren und seit Exchange 2013 (?) könnten Anwender die „GAL-Photos“ selbst verwalten, die dann aber im Exchange Store liegen.

Mit Export-ExchangeUserPhoto können Sie als privilegierter Benutzer (EWS Impersonation) diese Photos exportieren und anzeigen. Es gibt mehrere Anwendungsfälle, sei es dass Sie als Firma die Bilder einfach auf „Unsinn“ kontrollieren müssen oder aus Reportzecken sehen wollen, wer noch ein Bild braucht oder Sie die Bilder in Exchange als autoritative Quelle für andere Zwecken, z.B. Intranet, nutzen wollen.

Berechtigungen

Wie schon geschrieben, liegen die Bilder im Postfach des Benutzers und sind damit nur für Personen erreichbar, die auch EWS-Impersonation Rechte auf das Postfach haben. Dazu reicht aber nicht „Vollzugriff“ auf das Postfach. Die Bilder liegen in einem per Outlook nicht zugänglichen Bereich. Ohne EWS-Impersonation-Recht auf andere Postfächer können Sie mit diesem Skript nur ihre eigene Photos exportieren. Für einen ersten grundsätzlichen Test reicht das schon mal.

Seit Exchange 2016 gibt es mit "Export-RecipientDataProperty " ein eigenes Commandlet zum Export von Bildern, so dass Sie dieses Skript per EWS nicht benötigen

Aufruf für mehrere Postfächer

Das Skript akzeptiert eine Maildresse als Parameter oder per Pipeline eine ganze Liste von Mailadressen. Insofern gibt es verschiedene Möglichkeiten für einen Aufruf:

# Export für ein einzelnes Postfach
Export-exchangeuserphoto -smtpaddress: "user1@msxfaq.de"

# Einzelnes Postfach ueber Pipeline einstellen
"user1@msxfaq.de" | Export-exchangeuserphoto

# Beispiel fuer zwei Postfaecher
(user1@msxfaq.de, user2@msxfaq.de)  | Export-exchangeuserphoto

# Liste der SMTP-Adressen aus einer Textdatei lesen und uebergeben
Get-content userliste | Export-exchangeuserphoto

# Liste der vorhandenen Postfaecher ermitteln und uebergeben
get-mailbox -ResultSize unlimited `
   | %{$_.primarysmtpaddress.tostring()} `
   | Export-exchangeuserphoto

Natürlich müssen Sie über die Parameter “ImpersonateUser” und „Impersonatepassword“ noch das privilegierte Konto angeben, wenn das aktuell angemeldete Konto nicht über die Rechte verfügt.

Über den Parameter „photodirectory“ können Sie bestimmen, wohin die Bilder abgelegt werden. Per Default wird ein Verzeichnis „Photos“ unter dem aktuellen Verzeichnis angelegt. Bestehende Photos werden immer wieder ohne Warnung überschrieben.

Ausgabe

Im angegebenen Zielverzeichnis landen in der Regel pro Benutzer 8! JPEG-Dateien mit den folgenden Auflösungen:

  • 48x48
  • 64x64
  • 120x120
  • 240x240
  • 360x360
  • 432x432
  • 504x504
  • 648x648

Damit sollte für jeden Client etwas „dabei“ sein.

Wie Sie die Bilder weiter verarbeiten, bleibt ihnen überlassen.

Download

Ehe ich es vergesse: Hier das Skript zum Download:

export-exchangeuserphoto.20170912.ps1
Nach dem Download bitte die Erweiterung auf PS1 umstellen

Das PowerShell Skript braucht die EWS Managed API, welche auf dem PC zu installieren ist. Der Pfad zur Microsoft.Exchange.WebServices.dll ist wie folgt vorbelegt. Dieser ist ggfls. anzupassen

[string]$EWSManagedApiPath = "C:\Program Files\Microsoft\Exchange\Web Services\2.2\Microsoft.Exchange.WebServices.dll"

Das Skript ist nicht für einen automatischen Einsatz gedacht. Starten Sie es am besten aus einer Powershell. Im Skript selbst werden keine Exchange Commandlets genutzt.

Import von Bildern

Natürlich können Sie auch per EWS aber besser noch per Exchange PowerShell auch wieder Bilder für den Anwender importieren.

Import-RecipientDataProperty `
   -Identity "user1@msxfaq.de" `
   -Picture -FileData ([Byte[]]$(Get-Content -Path "C:\photos\user1@msxfaq.de.jpg" -Encoding Byte -ReadCount 0))

Auch der Befehl kann natürlich per Pipeline und Schleifen mehrere Benutzer verarbeiten

Weitere Links