www.SAMURAJ-cz.com 

19.04.2024 Rostislav Translate to English by Google     VÍTEJTE V MÉM SVĚTĚ

Články

Active Directory - fotografie u uživatelů nejen pro Outlook 2010

Středa, 20.10.2010 09:55 | Samuraj - Petr Bouška |
Již od Windows Server 2000 jsou součástí MS Active Directory (AD) atributy pro uložení obrázku (fotografie) k uživatelskému účtu. Tyto údaje můžeme využít v některých aplikacích (třeba Instant Messaging), které načítají údaje o uživatelích z AD. A hodí se, pokud používáme adresář pro personální data. Nově jsou fotografie z AD podporovány v MS Outlook 2010. Vkládání obrázků do AD není složité, ale existují různé možnosti, které si zde popíšeme.

Nový popis v článku Exchange 2016 a fotografie uživatelů.

Fotografie uživatele v AD

Active Directory existují dva atributy pro uložení fotografie/obrázku. Jmenují se thumbnailPhoto a jpegPhoto. První je určený pro náhledy (rozuměno malé obrázky), druhý pro normální obrázky. Ovšem ukládání větších obrázků do AD je třeba zvážit, kvůli nárůstu velikosti databáze. Microsoft dodnes nepřišel s GUI pro editaci těchto atributům, přitom Active Directory Users and Computers (ADUC) je ideálním kandidátem. Naštěstí máme dnes k dispozici PowerShell.

Před příchodem Windows Server 2008 byla jediná možnost editovat přímo atribut (třeba přes ADSIEdit) a zadat hexa data obrázku. Samozřejmě není problém napsat jednoduchou aplikaci (třeba v PHP), která atribut edituje pomocí LDAP příkazů. Jinou možností je rozšíření ADUC o možnost pohodlné editace v GUI. S příchodem Windows Server 2008, PowerShellu a modulu ActiveDirectory máme možnost využít PowerShellových příkazů.

Outlook 2010 a fotky uživatelů

S příchodem Outlooku 2010, se o fotografiích v AD začalo více hovořit, protože jsou konečně integrovány do pošty. Obecně Outlook 2010 používá řadu personálních údajů a umožňuje napojení na různé sociální a komunikační sítě a systémy (jako IM či IP telefonie).

Na všech místech, kde jsou údaje o uživateli (a také v hlavičce a konci emailu), se může zobrazit jeho fotografie, pokud ji má Outlook k dispozici. Nejprve se Outlook dívá do lokálně uložených kontaktů, pokud tam fotografie není, tak se může podívat do Active Directory (samozřejmě v doménovém prostředí). Vlastní zprostředkování fotografií neprovádí Exchange Server, ale sám Outlook komunikuje s doménovým řadičem. Fotografie nejsou obsaženy v Global Address Listu (GAL) a nestanou se ani součástí odesílaných zpráv. Takže se žádným způsobem nedostanou mimo firmu.

Jak jsme si řekli, fotografie se stahují přímo z doménového řadiče (a Outlook je ani nijak dlouhodobě nekešuje, takže se pokaždé stahují znovu). Pokud si zachytíme probíhající komunikaci, tak jsou vidět šifrovaná spojení na DC, kdy se fotografie stahují. Zajímavé je, že když použijeme Outlook Anywhere (dříve RPC over HTTP), tak fotografie také fungují a stahují se přes to šifrované spojení s Exchange serverem (jak to funguje nevím).

Fotografie uživatele se hledá v atributu thumbnailPhoto u daného uživatele. Jak jsme řekli, tak ten je zde již od Windows Server 2000, ale pokud nemáte doménu Windows Server 2008, tak vám fotografie fungovat nebudou. Protože se nejprve ověřuje hodnota atributu mAPIID, která musí být 35998, což je v případě AD Windows Server 2008 (tak jsem to alespoň nalezl na internetu).

Pokud máme Exchange Server 2010, tak máme k dispozici i nový PowerShell příkaz Import-RecipientDataProperty pro vkládání fotografií. Ale jak dále uvidíme, nepřináší nic nového oproti standardnímu příkazu z modulu ActiveDirectory. Přitom se mi podle diskuzí na internetu zdá, že tu jednoduchou metodu neznají ani lidé z MS týmu Exchange Serveru.

Import-RecipientDataProperty -Identity Ayla -Picture -FileData ([Byte[]]$(Get-Content -Path "M:\Employee Photos\AylaKol.jpg" -Encoding Byte -ReadCount 0))

Atribut thumbnailPhoto se standardně nereplikuje do Global Catalog (GC) a ve všech návodech na internetu se uvádí, že je toto potřeba změnit (pomocí Active Directory Schema snap-inu). V praxi jsem ověřil, že to třeba není, ale asi pouze pokud máme jen jednu doménu. Dále se uvádí, že když nemáme Exchange 2010 a používáme v Outlooku Cached Exchange mode, tak nám obrázky fungovat nebudou. Údajně až Exchange 2010 rozšiřuje GAL o odkazy na fotky v AD. Já používám Exchange Server 2007, Outlook 2010, Cached Exchange mode a vše mi funguje.

Ještě jedna zajímavá poznámka k tomuto tématu. Outlook 2010 obsahuje také funkci jednosměrné synchronizace údajů z Exchange GAL do kontaktů. Funguje to pouze pro již existující záznamy v kontaktech a porovnává se SMTP adresa. Takže můžeme vytvořit lokální kontakt pouze se zadanou emailovou adresou a ostatní údaje, včetně fotografie, se nám se synchronizují z Active Directory.

Parametry obrázku pro thumbnailPhoto

Obrázek, který chceme vložit do atributu thumbnailPhoto, musí splňovat několik podmínek (i když se často hovoří o tom, že by měl splňovat). Formát obrázku musí být JPG (někde se uvádí i GIF, netestoval jsem). Důležitá je jeho velikost, která nesmí překročit 10 kB. A doporučené rozměry obrázku jsou 96 x 96px.

Editace thumbnailPhoto pomocí rozšíření ADUC

Rozšíření Active Directory Users and Computers o editaci fotografií k uživateli, si můžeme napsat sami (na internetu existuje řada návodů), ale jelikož Oli Dewdney napsal funkční knihovnu, tak můžeme použít tu. Stáhnout se dá z adresy www.dewdney.co.uk/adext/adext.zip, kde je v zipu vlastní knihovna a návod, jak ji zaregistrovat. Knihovnu jsem otestovat pod Windows 7 64 bit a funguje korektně a pohodlně. Provede za nás i to, že vkládaný obrázek zmenší a ořeže na potřebné rozměry (což vždy nemusí vypadat nejlépe). Editace obrázku se pak nachází na nové záložce ve vlastnostech uživatele. Takže je vše pohodlné, přehledné a funkční. Pouze je problém, když chceme na počátku editovat velké množství uživatelů, na to je vhodnější skript.

ADUC rozšíření o thumbnailPhoto

Editace thumbnailPhoto pomocí PowerShellu

Nemám nasazený Exchange Server 2010, tak jsem hledal, jestli neexistuje jiná pohodlná cesta vkládání obrázků a hlavně dávkovým způsobem. Našel jsem několik diskuzí a na první pohled složitých postupů, jak použít PowerShell, až jsem narazil na vynikající, jednoduchou metodu, popsanou v článku How To: Use AD PowerShell to Manage Outlook 2010 User Photos with Previous Versions of Exchange.

Použijí se jednoduché dva příkazy a vše funguje. Prvním načteme obrázek ze souboru do proměnné a druhým vložíme do patřičného atributu. Nijak se ovšem nekontroluje velikost obrázku apod., takže si je musíme připravit dopředu.

$photo = [byte[]](Get-Content c:\bouska.jpg -Encoding byte)
Set-ADUser bouska -Replace @{thumbnailPhoto=$photo}

Obdobným způsobem můžeme i obrázek od uživatele uložit do souboru.

$user = Get-ADUser bouska -Properties thumbnailphoto
$user.thumbnailphoto | Set-Content c:\bouska.jpg -Encoding byte

Editace thumbnailPhoto pomocí PHP

Pouze jako stručné nastínění možností uvedu příklad kódu, který zobrazuje fotografii z atributu thumbnailPhoto uživatele. Zapsání atributu je obdobné. Krátký úvod do použití LDAPu pod PHP jsem popsal v člínku Jak na LDAP a LDAPS v PHP pod Windows.

<?php
function showPictures($user) {
  if($connect = @ldap_connect("ldaps://IP_domenoveho_radice")){
    ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3);
    ldap_set_option($ds, LDAP_OPT_REFERRALS, 0);
    if($bind = @ldap_bind($connect, "CN=Uzivatel,OU=Users,DC=firma,DC=local", "heslo")){
      $sr=ldap_search($connect, "OU=Users,DC=firma,DC=local", "(sAMAccountName={$user})");                                
      $entry = ldap_first_entry($connect, $sr);
      $info = ldap_get_values_len($connect, $entry, "thumbnailPhoto");
      echo $info[0];          
      @ldap_close($connect);
      return(true);
    }
  }
  @ldap_close($connect);
  return(false);
}
Header("Content-type: image/jpeg");
Header("Content-disposition: inline; filename=jpeg_photo.jpg");
showPictures($_GET["user"]);
?>
zobrazeno: 26319krát | Komentáře [7]

Autor:

Související články:

Active Directory a protokol LDAP

Správa počítačové sítě ala Microsoft, to je Active Directory. Jedná se o velice rozsáhlou skupinu technologií a služeb. Základem jsou adresářové služby, adresáře a komunikační protokol LDAP.

Outlook

Články týkající se poštovního klienta od Microsoftu. Počínaje verzí Outlook 2003, přes Outlook 2007, současný Outlook 2010 a v budoucnu určitě i dále.

Pokud se chcete vyjádřit k tomuto článku, využijte komentáře níže.

Komentáře

  1. [1] IvoHaLDS

    upload obrázku v javě:

    try {

    DirContext ctx = new InitialDirContext(env);

    ModificationItem[] mods = new ModificationItem[1];

    String imagepath = "jpegPhoto.jpg";

    RandomAccessFile raf = new RandomAccessFile(imagepath, "r");

    FileChannel channel = raf.getChannel();

    ByteBuffer buf = channel.map(FileChannel.MapMode.READ_ONLY, 0, channel.size());

    byte[] imagedata = new byte[(int) channel.size()] ;

    InputStream is = new FileInputStream(imagepath);

    is.read(imagedata, 0, (int) channel.size());

    is.close();

    mods[0] = new ModificationItem(DirContext.REPLACE_ATTRIBUTE, new BasicAttribute("jpegPhoto", imagedata));

    String name = "CN=ih50004";//user

    ctx.modifyAttributes(name+",CN=Employees,DC=EmployeesNew,DC=local", mods);

    raf.close();

    ctx.close();

    } catch (Exception e) {

    e.printStackTrace();

    }

    Středa, 28.11.2012 12:41 | odpovědět
  2. [2] martas

    Řešil někdo zprovoznění tohoto editačního rozšíření na W2008R2? - mě to zde nefunguje... Na popisovaných W7 64bit, bez problémů..

    děkuji za radu

    Pátek, 01.02.2013 16:03 | odpovědět
  3. [3] Tomas Herzinger

    Ahoj Petře,

    nyní používám hodně aplikaci CodeTwo Active Directory Photos

    http://www.codetwo.com/freeware/active-directory-photos/

    funguje to dobře, hlavně automatizovaně a je to zadarmo.

    Pátek, 08.11.2013 13:16 | odpovědět
  4. [4] Rudolf Koždoň

    Díky za tip. Knihovan funguje na AD 2008R2 k 21.1.2014 Akorát je mrzuté, že to centruje fotku takže lidí mají uřízlo hlavu když se importují fitky rovnou z ateliéru. Je nutný před procesing :-). ale Dobrej směr.

    Napsal jsem skriptík Funguje mi na PS4 omlouvám se za dřevitost zápisu je to moje první práce...:-(

    Úterý, 21.01.2014 10:07 | odpovědět
  5. [5] Rudolf Koždoň

    $File = get-childitem D:\UF\Resampled\*.jpg #Načtení adresáře

    Foreach ($i in $File) #Smyčka pro každý objekt

    {

    $Name = $i.name -replace "\..*" #ořeže příponu a uloží čisté jméno souboru

    $Picture = $i | get-image

    $Height = $Picture.height #přepočty velikostí a poměrů stran obrázku

    $Width = $Picture.width

    $Ratio = $Height/$Width

    $Height = [Math]::Round(96 * $Ratio)

    $Bottom = $Height - 96

    #Samotné úpravy obrázku

    $Picture = $Picture | Set-ImageFilter -filter (Add-ScaleFilter -Width 120 -Height $Height -passThru) -passThru

    $Picture = $Picture | Set-ImageFilter -filter (Add-CropFilter -Bottom $Bottom -passThru) -passThru

    #tvorba nového názvz souboru

    $NewFile = $Name + "_small"

    #uložení nového obrázku

    $Picture.SaveFile("D:\UF\Resampled\small\$NewFile.jpg")

    #Načtení obrázku do AD ze složky

    $photo = [byte[]](Get-Content D:\UF\Resampled\small\$NewFile.jpg -Encoding byte)

    Set-ADUser $Name -Replace @{thumbnailPhoto=$photo}

    }

    Úterý, 21.01.2014 10:09 | odpovědět
  6. [6] Rudolf Koždoň

    Pro skript musíte importovat AD modul a PowerShell Pack

    Pozor si dejte na rozdíl hodnot obrázku rozlišení a datová hustota (ta se s komprimací vlikosti moc nemění)

    Úterý, 21.01.2014 10:13 | odpovědět
  7. [7] Pavel Kratký

    Ahoj, podarilo se mi nastavit fotky u uzivatelu v Outlooku 2010 a 2013 dle navodu http://woshub.com/how-to-import-user-photo-to-active-directory-using-powershell/

    Ale problem je ted v tom, ze se fotka nezobrazi v chytrem mobilu, Android iOS. I kdyz synchronizace probehne, tak fotka neni videt.

    Mame Win srv 2008 R2 a MS Exchange 2010.

    Cim to muze byt?

    Středa, 07.12.2016 09:18 | odpovědět
Přidat komentář

Vložit tag: strong em link

Vložit smajlík: :-) ;-) :-( :-O

Nápověda:
  • maximální délka komentáře je 2000 znaků
  • HTML tagy nejsou povoleny (budou odstraněny), použít se mohou pouze speciální tagy (jsou uvedeny nad vstupním polem)
  • nový řádek (ENTER) ukončí odstavec a začne nový
  • pokud odpovídáte na jiný komentář, vložte na začátek odstavce (řádku) číslo komentáře v hranatých závorkách