ADPhoto
Achtung: AD-Datenbankwachstum.
Die Ablage von Bilder im AD vergrößert die NTDS.DIT und ein 32bit DC
wird langsam, wenn die Datenbank über 1 GB groß ist.
Mit Exchange 2013 und Lync 2013 hat Microsoft das Verfahren geändert. Bilder werden im Postfach des Benutzers abgelegt und von Exchange auch in das Feld "ThumbnailPhoto" geschrieben und von Exchange 2013, Outlook 2013 und Lync 2013 von dort genutzt. Siehe Lync Photo, Office 365 Profilfoto und Export-ExchangeUserPhoto.
Outlook 2010, Lync 2010 und diverse andere Lösungen können neben dem Namen und Mailadressen auch Bilder angezeigt werden. Hier zwei Beispiele: Einmal der Lync 2010 Client mit Herrn Deutinger (Ferrari Electronic) als Partner in der Federation und Herr Ulbrich in Outlook.
Da stellt sich natürlich die Frage, wo dieses Bild hinterlegt ist. Im Fall von Outlook könnte man noch tricksen, indem man einen Kontakt mit dem Bild anlegt. In Lync kann ich ein Bild auf einem Webserver ablegen und über eine URL erreichbar machen und so "verbreiten".
Wer nicht über AD-Photos arbeiten möchte, kann das Bild auch einfach auf einem beliebigen Webserver bereit stellen und im Lync Client als URL angeben. So habe ich das z.B.: bei mir gemacht.
Hinweis:
Der Download von Bildern von anderen URLs ist
nur möglich, wenn auf der gesamten Kette von
Lync Client bis zum veröffentlichenden Webserver
keine Authentifizierung erforderlich ist. Der
Lync Client hat keine Möglichkeit, vom Anwender für das Abrufen der Bilder entsprechende
Anmeldedaten abzufragen. Das wäre bei vielen per
Federation verbundenen Kontakten mit unterschiedlichen Quellen auch nur schwer
möglich. Wer also Bilder für Partner erreichbar
machen will, muss diese ohne Authentifizierung
im Internet bereit stellen.
Zumindest für Mitarbeiter ist es aber schon seit Windows 2003 möglich, solche Informationen im Active Directory mit zu hinterlegen.
Berechtigungen:
Ein Benutzer kann sein Bild nicht
selbst aktualisieren. Es muss also ein administrativer Benutzer sein,
welcher auf das Feld "ThumbnailPhoto" zum Schreiben berechtigt ist.
Solche Updates muss also ein entsprechend auf das Benutzerobjekt privilegiertes Konto durchführen. Zudem kann ein Administrator auf der Client Policy steuern, ob Bilder angezeigt werden.
Über SET-CSCLientPolicy und Get-CSClientPolicy sind diese Einstellungen zugänglich.
- The Lync Team Blog: Picture
This
http://blogs.technet.com/b/lync/archive/2012/06/12/picture-this.aspx
Hintergrund "ThumbnailPhoto"
Das Feld welches von Outlook, Exchange und Lync genutzt wird, ist das Property "ThumbnailPhoto". Allerdings gibt es noch andere Felder, die ähnliche Funktionen haben und daher leicht verwechselt werden können:
Feldname | Schema Version | Typ/Größe | Verwendung |
---|---|---|---|
Thumbnailphoto (Picture Attribut) http://msdn.microsoft.com/en-us/library/ms680034.aspx Format JPG oder PNG |
Windows 2000 |
Oktet 0-102400 Byte |
Einsatz in OCS/Outlook |
jpegPhoto (jpegPhoto Attribut) |
Windows 2003 |
Oktet ohne Grenzen |
nicht genutzt |
Thumbnaillogo (Logo Attribut) |
Windows 2000 |
0-32767 |
nicht genutzt |
Relevant ist, wie gesagt, nur das Feld "Thumbnailphoto", dessen genaue Definition im Schema zu sehen ist:
Exchange will automatically create a 64
pixel by 64 pixel version of that photo and update the User's thumbnailPhoto attribute.
Quelle: Configure the use of high-resolution photos in Skype
for Business Server 2015
https://docs.microsoft.com/en-us/skypeforbusiness/deploy/integrate-with-exchange-server/high-resolution-photos
Berechtigungen
Da stellt sich natürlich die Frage, wer das Feld beschreiben kann. Eine kurze Kontrolle in meinem eigenen produktiven LAN zeigte mir, dass ich als Benutzer mein eigenes Foto nicht bearbeiten kann.
Aktuell ist es also dem Administrator überlassen, die Bilder zu aktualisieren. Es gibt aber zwei Lösungen für das Problem
- Provisioning über Anwendungsrechte
Denkbar wäre aber ein Automatismus, dass ein Mitarbeiter einfach ein "meinbild.jpg" in sein Home-Verzeichnis ablegt und ein privilegierter Prozess einfach einmal in der Nacht die Homverzeichniss absucht und geänderte Bilder automatisch importiert. Alternativ wäre es ne nette Lösung, eine solche Funktion z.B. über eine Sharepoint Seite oder ASPX-Anwendung bereit zu stellen, d.h. ein Anwender meldet sich auf einer Webseite mit seinen Anmeldedaten an, stellt ein JPG-Bild bereit, welches nicht größer als 100k ist und die Webanwendung lädt das Bild dann entsprechend hoch und könnte dem Benutzer z.B.: per Mail oder als Ergebnis der Webseite informiert. - Berechtigungen an SELF delegieren
Wer sich mit der Verfahren von Berechtigungen auskennt, kann auf der Domäne oder einer OU einfach dem Benutzer "Self" das Recht gebe, auf Benutzerobjekten das Feld "ThumbNailPhoto" zu schreiben. Siehe auch Active Directory thumbnailPhoto attribute permissions http://www.thumbnailphoto.net/2010/11/active-directory-thumbnailphoto-attribute-permissions/
Die Vergabe von Berechtigungen hätte den Vorteil, dass diverse Tools eingesetzt werden können, mit denen der Anwender selbst sein Bild aktualisieren kann. Allerdings haben Sie dann keine Garantie, das das Bild technisch korrekt (Format und Größe) und logisch korrekt (d.h. keine Spaßbilder, schlechte Qualität etc.) ist. Wer allerdings eh Sharepoint 2010 einsetzt, kann damit die MyPhotos in das AD replizieren lassen und so dem Anwender heute schon eine Option zur Pflege seines Bildes geben.
- Active Directory thumbnailPhoto attribute
permissions
http://www.thumbnailphoto.net/2010/11/active-directory-thumbnailphoto-attribute-permissions/ - How do I delegate control of the thumbnail photo
field ?
http://www.exclaimer.com/support-home/kb/product/Knowledge_Base/How_do_I_delegate_control_of_the_thumbnail_photo_field.aspx
Export mit PowerShell
Ehe Sie die AD-Bilder vielleicht überschreiben, sollten Sie mal schauen, welche Anwender schon ein Bild irgendwie abgelegt habem:
# Anzahl der Obekte (Get-ADuser -LDAPFilter "(thumbnailphoto=*)").count # Liste der Objekte Get-ADuser -LDAPFilter "(thumbnailphoto=*)" | select samaccountname
Das Attribute enthält direkt das Bild als binäres Array und kann über system.io-file sehr einfach wieder in einer Datei exportiert werden
$User=Get-ADUser frankcarius -properties thumbnailphoto $Filename='C:\temp\frankcarius.jpg' [System.Io.File]::WriteAllBytes($Filename, $User.Thumbnailphoto)
Darum eine Schleife zu bauen, die z.B. alle Bilder mit dem Namen des Benutzers exportiert, ist dann recht einfach.
[string]$path = "C:\temp" foreach ($aduser in (Get-ADuser -LDAPFilter "(thumbnailphoto=*)" -properties thumbnailphoto)){ [string]$filename = $path + "\" + $aduser.samaccountname + ".jpg" [System.Io.File]::WriteAllBytes($Filename, $aduser.Thumbnailphoto) }
Achtung: Jeder Anwender hat "Leserechte" im Active Directory und könnte sich daher diese Bilder auch extrahieren.
- Weekend Scripter: Exporting and
Importing Photos in Active Directory
https://devblogs.microsoft.com/scripting/weekend-scripter-exporting-and-importing-photos-in-active-directory/
Import mit Bordmittel
Da diese Funktion erstmalig mit Exchange 2010 und Outlook 2010 verfügbar wurde, gibt es auch ein Exchange Commandlet zum Import.
Import-RecipientDataProperty -Identity Username -Picture -FileData ([Byte[]]$(Get-Content -Path "c:\User.jpg" -Encoding Byte -ReadCount 0))
Seit Exchange 2013 ist dies noch einfacher möglich und folgende kleine Schleife liest alle Bilder in einem Verzeichnis ein. Der Dateiname sollte der Userpart des UPN oder der Mailadresse sein, damit die Datei auf das richtige Postfach gemachted wird
$fotolist = (get-childitem "c:\bilder" -filter "*.jpg") foreach ($foto in $fotolist) { write-host "Importing " $foto.name Set-UserPhoto ` -Identity ($foto.basename + "@netatwork.de") ` -PictureData ([System.IO.File]::ReadAllBytes($foto.fullname)) ` -Confirm:$False }
- Set-UserPhoto
https://technet.microsoft.com/de-de/library/jj218694(v=exchg.150).aspx
https://technet.microsoft.com/en-us/library/jj218694(v=exchg.160).aspx - Working with Hi-Res Photos in Exchange
2013 and Lync 2013
http://www.expta.com/2012/12/working-with-hi-res-photos-in-exchange.html
Wer also die Bilder schön z.B. mit dem SamAccountName benannt hat, kann recht einfach eine Schleife durch das Verzeichnis der Bilder drehen und die dazu gehörigen Benutzer entsprechend aktualisieren. Allerdings kann dieses Commandlet das Bild nicht auf die richte Größe zusammenschrumpfen. Sie müssen schon selbst dafür sorgen, dass das Bild maximal 10 kB groß ist.
-
Export-ExchangeUserPhoto
Per EWS von ein oder mehreren Usern die Bilder als JPG in ein Verzeichnis exportieren. - Import-RecipientDataProperty
http://technet.microsoft.com/en-us/library/dd351252(EXCHG.140).aspx - Photos in Active Directory
http://www.arricc.net/active-directory-photos-sharepoint.php - http://msunified.net/exchange-downloads/script-uploadphoto-ps1/
-
The Lync Team Blog: Picture This
http://blogs.technet.com/b/lync/archive/2012/06/12/picture-this.aspx -
msunified.net: SCRIPT: UploadPhoto.ps1
http://msunified.net/exchange-downloads/script-uploadphoto-ps1/ -
How to put and retrive Active Directory Photo
Attribute (thumbnailPhoto)
http://241931348f64b1d1.wordpress.com/2011/05/12/how-to-put-and-retrive-active-directory-photo-attribute/
Import mit Sharepoint 2010
Sharepoint kennt schon länger den Bereich "MySite", der für jeden Mitarbeiter eine persönliche Homepage im Firmennetzwerk darstellt. Das kann einfach nur eine Seite mit den Kontaktdaten sein. Mitarbeiter können hier aber auch ihre Tätigkeit beschreiben. MySites helfen dabei, in größeren Firmen vorhandenes Wissen auch zu erreichen. Sehr oft sucht jemand etwas und kauft externe Beratung ein, obwohl ein Kollege das auch schon mal gemacht hat. "Skill-Search" wird dies auch genannt und funktioniert natürlich nur, wenn Anwender ihre MySite auch pflegen. Lync und die Sharepoint Suche kann diese Datenquellen dann auch anzapfen, um Personen zu finden.
Und diese MySite erlaubt es dem Mitarbeiter auch, ein Bild hochzuladen.
“In order to synchronize User profile pictures
between Microsoft SharePoint Server, AD DS, and Outlook 2010 by using
the Microsoft Outlook Social Connector, you must set the Data Source
Connection für the Picture property mapping to Export.“
http://technet.microsoft.com/en-us/library/ff182925(office.14).aspx
Der Anwender geht dann einfach z.B. auf dem Internet auf sein Profil:
Im Profi können Sie dann auf "Mein Profil bearbeiten" klicken um dann das Bild auszuwählen der zu löschen
Damit aber das Bild auch Sharepoint Richtung Active Directory übertragen wird, muss der Sharepoint Administrator eine Verbindung zwischen dem Bild in Sharepoint und dem Feld im Active Directory herstellen. In Sharepoint erfolgt dies an folgender Stelle:
Central Administrator\Manage Service Applications\User Profile Service Application\Manage User Properties page
Dort muss das Feld "thumbnailPhoto" addiert und dann ein manueller Abgleich angestoßen werden.
- Plan für profile synchronization (SharePoint Server
2010)
http://technet.microsoft.com/en-us/library/ff182925.aspx - SharePoint 2010 Profile Picture Property 101
http://blogs.msdn.com/b/russmax/archive/2010/02/27/sharepoint-2010-profile-picture-property-101.aspx
Anzeige in Outlook und Exchange
Auch Microsoft Exchange und Outlook 2010 können diese Feld nutzen. Bharat Suneja hat dies auf seinem Blog sehr gut beschrieben, so dass ich mir hier weitere Bilder erspare.
-
Export-ExchangeUserPhoto
Per EWS von ein oder mehreren Usern die Bilder als JPG in ein Verzeichnis exportieren. - GAL Photos in Exchange 2010 and Outlook 2010
http://blogs.technet.com/b/exchange/archive/2010/03/10/gal-photos-in-exchange-2010-and-outlook-2010.aspx
Per Default werden die Bilder nicht in die Offline Adressbücher importiert, was allein aus Platzgründen schon ratsam ist. Selbst ein 96x96 Bild mit 10k bedeutet bei 10.000 Benutzern, dass das OAB überschlagsweise um 100.000kb oder 100MB wächst. Statt dessen wir Outlook angewiesen, dass es diese Daten aus dem AD beziehen soll. Das kann man aber auch mit unterbinden, indem man im OAB den "Indexeintrag" mit folgenden PowerShellzeilen entfernt:
$attributes = (Get-OfflineAddressBook "Default Offline Address Book").ConfiguredAttributes $attributes.Remove("thumbnailphoto,Indicator") Set-OfflineAddressBook "Default Offline Address Book" -ConfiguredAttributes $attributes
3rd Party Produkte
Wo Bordmittel an ihre Grenzen stoßen, öffnet sich ein Markt für Drittanbieter oder Freeware-Tools. Unter all den vielen Programmen und Skripten, die die JPG-Bilder in das passende Feld im AD importieren, gibt es mit ADPhotoEdit ein nettes Programm, welches die Verwaltung per GUI stark vereinfacht und sogar die Bilder zurecht schrumpfen kann.
Das Programm "AD Photo Edit" kann per GUI einfach
Bilder anzeigen und auch verändern und wieder speichern.
http://www.cjwdev.co.uk/Software/ADPhotoEdit/Info.html
Andere Programme sind z.B.
- Foto im Active Directory hinterlegen und bei
Benutzeranmeldung anzeigen
https://znil.net/index.php?title=Foto_im_Active_Directory_hinterlegen_und_bei_Benutzeranmeldung_anzeigen - Exclaimer Outlook Photos (Free)
http://www.exclaimer.com/products/outlook-photos/Default.aspx - ThumbNailPhoto ($)
http://www.thumbnailphoto.net/ - CodeTwo Active Directory Photos
http://www.codetwo.de/freeware/active-directory-photos/
Das kleine ZIP-Paket muss einfach ausgepackt und das Setup aufgerufen werden.
Das Programm prüft beim Aufruf nach Updates, indem es
versucht auf
www.cjwdev.co.uk
zuzugreifen.
Dieses Verhalten kann man nach dem Start in den Optionen aber abschalten und der Fehler hier ist nur sichtbar, weil ich es in einer
abgeschotteten Umgebung verwendet habe.
Das Programm selbst ist ein kleines .NET Programm mit grade mal wenigen kb Größe. Wobei natürlich das .NET Framework vorhanden sein muss.
Nach dem Start suche sie nach den Benutzern. Wenn Sie im Filterfeld ein "*" eintragen, dann werden alle Benutzer gesucht.
Sie sehen dann sofort die Benutzer und neben dem SAMAccountName auch die Mailadresse und das Bild, sofern vorhanden. Das Bild ist dabei nicht auf eine bestimmte Größe (in Pixel) beschränkt, sondern in der Dateigröße (max. 100kb). Da fehlt dann wirklich nur noch der Bulk Import.
Weitere Links
- Lync Photo
- Office 365 Profilfoto
-
Export-ExchangeUserPhoto
Per EWS von ein oder mehreren Usern die Bilder als JPG in ein Verzeichnis exportieren. - The Lync Team Blog: Picture This
http://blogs.technet.com/b/lync/archive/2012/06/12/picture-this.aspx - Skype for Business and broken pictures
https://ingogegenwarth.wordpress.com/2018/07/06/sfb-broken-profile-pics/ - Getting pictures converted for ThumbnailPhoto to be
used in Lync/Outlook (ConvertTo-ADThumbnail)
https://p0wershell.com/?p=451 - Info about the AllowAdalForNonLyncIndependentOfLync
setting in Skype for Business, Lync 2013, and Exchange
Online
https://support.microsoft.com/en-us/help/3082803/info-about-the-allowadalfornonlyncindependentoflync-setting-in-skype-f
Parameter AllowAdalForNonLyncIndependentOfLync - Set My Picture options in Skype for Business
https://support.office.com/en-us/article/set-my-picture-options-in-skype-for-business-0ce1b350-fd0f-4c32-889d-bf6137100eb8 - DLL zur Erweiterung von AD Users und Computer
http://www.moe.am/index.php/2009/03/pictures-in-active-directory-Users-and-computers/
http://www.dewdney.co.uk/adext/adext.zip - GAL Photos in Exchange 2010 and Outlook 2010
http://blogs.technet.com/b/exchange/archive/2010/03/10/gal-photos-in-exchange-2010-and-outlook-2010.aspx - GAL Photo FAQ
http://blogs.technet.com/b/exchange/archive/2010/06/01/455005.aspx - Photos in Active Directory
http://www.arricc.net/active-directory-photos-sharepoint.php - Active Directory thumbnailPhoto attribute
permissions
http://www.thumbnailphoto.net/2010/11/active-directory-thumbnailphoto-attribute-permissions/ - Upload picture in Outlook 2010 using the Exchange
Management Shell (Exchange 2010)
http://blogs.technet.com/b/ilvancri/archive/2009/11/17/upload-picture-in-outlook-2010-using-the-exchange-management-shell-exchange-2010.aspx - Technet: Import-RecipientDataProperty
http://technet.microsoft.com/en-us/library/dd351252(EXCHG.140).aspx - 292029 How To Manipulate the ThumbNailPhoto Attribute of a User Object in the Active Directory
- Using the jpegPhoto attribute in AD - Part I
http://blogs.technet.com/b/btrst4/archive/2004/08/30/222629.aspx - Follow-Up: import-recipientdataproperty
http://blogs.technet.com/ilvancri/archive/2010/01/08/follow-up-import-recipientdataproperty.aspx - Bilder im Active Directory speichern
http://www.maildentity.de/2009/10/bilder-im-active-directory-speichern.html - Pictures in Active Directory Users and Computers
http://www.moe.am/index.php/2009/03/pictures-in-active-directory-Users-and-computers/ - Importing User pictures from Active Directory to
MOSS 2007
http://blog.henryong.com/2007/02/21/importing-User-pictures-from-active-directory-to-moss-2007/ - Outlook 2010 with Pictures in Active Directory
http://blog.icewolf.ch/archive/2010/02/01/outlook-2010-with-pictures-in-active-directory.aspx - Active Directory thumbnailPhoto and jpegPhoto Import
(99 US-$)
http://www.dovestones.com/products/Active_Directory_jpegPhoto_thumbnailPhoto.asp - ThumbnailPhoto Tool (99€)
http://www.thumbnailphoto.net/
http://www.starcoder.net/thumbnailphoto-tool/ - Photos in Lync 2010
http://www.codesalot.com/2010/photos-in-lync-2010/ - DLL zur Erweiterung von AD Users und Computer
http://www.moe.am/index.php/2009/03/pictures-in-active-directory-Users-and-computers/
http://www.dewdney.co.uk/adext/adext.zip