CZ 
06.10.2024 Hanuš VÍTEJTE V MÉM SVĚTĚ

An English translation is available for this article. Pro tento článek je dostupný anglický překlad.
Exchange 2016 and user photos

Exchange 2016 a fotografie uživatelů

Upraveno 30.07.2019 09:00 | vytvořeno | Petr Bouška - Samuraj |
Řada aplikací podporuje zobrazení fotky uživatele, kterou můžeme uložit do Active Directory Domain Services (AD DS) a od Exchange 2013 také na poštovní server. Fotografii v organizaci využije Outlook či OWA, Skype for Business, SharePoint, případně další. Kvůli nárokům na velikost se do AD DS ukládá pouze malá fotografie (náhled, low-resolution photo), kdežto na Exchange můžeme uložit větší fotku (high-resolution photo). Standardně si mohou fotku nahrát/změnit sami uživatelé pomocí OWA. Podíváme se na možnost, jak toto zablokovat pomocí politiky.
zobrazeno: 8 043x (8 037 CZ, 6 EN) | Komentáře [0]

Pozn.: Na pohled jednoduchá věc, dá se i jednoduše používat. Ale pokud chce člověk vědět, jak to přesně funguje, tak má smůlu. Popis Microsoftu se blíží nule.

Před mnoha lety jsem toto téma popisoval v článku Active Directory - fotografie u uživatelů nejen pro Outlook 2010. Zde jsou zmíněny hlavně novinky při využití Exchange Server 2016. Nějaké oficiální (dost nedostatečné) informace Manage access to high-resolution user photos a Configure the use of high-resolution photos in Skype for Business Server.

Rozlišení fotografií a umístění

Náhledy v AD DS

Fotografie uživatele (náhled) se v Active Directory Domain Services (AD DS) ukládá do atributu thumbnailPhoto objektu uživatelský účet. Velikost souboru může být maximálně 100 kB, ale doporučuje se do 10 kB (cmdlet Import-RecipientDataProperty na Exchange 2010 dovolil nahrát maximálně 10 kB velký obrázek).

Dříve se všude uvádělo, že doporučené rozlišené je 96 x 96 px. Když použijeme nový (od Exchange 2013) cmdlet Set-UserPhoto, tak se uloží fotka na Exchange, ale také se vytvoří náhled (thumbnailPhoto) o velikosti 64 x 64 px. Podle informací u Microsoftu ke starším verzím to vypadá, že na Exchange 2013 se ukládala dokonce jen velikost 48 x 48 px.

Fotografie na Exchange serveru

Fotografie ve větším rozlišení se ukládá na Exchange server do schránky daného uživatele. Microsoft uvádí (třeba u popisu cmdletu Set-UserPhoto), že se ukládá do kořenové složky uživatelovy schránky (root directory of the user's Exchange mailbox). Snažil jsem se najít možnost, jak si tyto uložené fotografie přímo ve schránce prohlédnout, ale marně. Zkoušel jsem například MFCMAPI, ale žádný takový objekt jsem nenalezl.

Podle popisu je podporován 24-bitový JPEG s maximálním rozlišením 648 x 648 px a maximální velikosti 500 kB. Zdrojový soubor můžeme použít s větším rozlišením a při ukládání dojde automaticky ke změně rozměrů.

Různá rozlišení

Microsoft uvádí využití různých rozlišení obrázků následně:

  • 648 x 648 px - využije Skype for Business či Lync 2013
  • 96 x 96 px -  využije Outlook od verze 2013, OWA nebo Skype for Business pokud nemá lepší
  • 64 x 64 px (nebo 48 x 48 px) - použije se, pokud není k dispozici lepší rozlišení

Například v článku How user photos are displayed in Lync se přímo uvádí, že pokud jsme měli v AD DS uložené fotky s rozlišením 96 x 96 px, tak při nahrání obrázku s větším rozlišením na Exchange se nám náhled v AD DS přepíše horším rozlišením. To ovlivní například klienty Lync a Outlook 2010.

Pozn.: Více o variantách rozlišení mluvíme dále.

Nahrání fotografie uživatele

Obrázek si mohou nahrát (nebo změnit či odstranit)

  • uživatelé pro sebe pomocí webového rozhraní Outlook on the Web (případně administrátor pomocí impersonate), uloží se obrázek na Exchange i do AD DS
  • správce pošty pro všechny schránky pomocí Exchange Management Shell, uloží se obrázek na Exchange i do AD DS
  • doménový správce pro všechny uživatele může zapsat atribut thumbnailPhoto pomocí PowerShell AD modulu nebo speciální aplikací, uloží se pouze do AD DS

Vložení obrázku

Dále se zaměříme hlavně na Exchange Management Shell (EMS) a cmdlety Set-UserPhoto, Remove-UserPhoto, Get-UserPhoto.

Konfigurace nahrání uživatelské fotografie je jednoduchá. V příkladu vycházíme z toho, že na disku D je uložen JPG soubor a v příkazu je vypnuto potvrzení.

Set-UserPhoto -Identity bouska -PictureData ([System.IO.File]::ReadAllBytes("D:\bouska.jpg")) -Confirm:$false

Cmdlet Set-UserPhoto provede úpravu velikosti a nahraje obrázek ve větším rozlišení (pokud je zdrojový soubor dostatečně velký) do uživatelovy schránky a zároveň vytvoří náhled, který uloží k účtu uživatele v AD DS do atributu thumbnailPhoto. To samé se děje, pokud si uživatel nahraje fotku sám pomocí Outlook on the Web.

Doposud jsem (po mnoho let) používal nahrání fotografie do atributu thumbnailPhoto cmdletem Set-ADUser. Tímto příkazem se přímo uloží binární data do atributu, nedochází k žádným úpravám.

Set-ADUser -Identity bouska -Replace @{thumbnailPhoto=([byte[]](Get-Content D:\bouska2.jpg -Encoding byte))}

Zmenšení obrázku

Jak jsme si uvedli, tak cmdlet Set-UserPhoto uloží do AD DS náhled o velikosti 64 x 64 px. Pokud bychom chtěli mít náhledy v rozlišení 96 x 96 px, tak můžeme provést zmenšení fotografie a vložení příkazem Set-ADUser výše. Na internetu nalezneme řadu skriptů (obdobného principu), jak zmenšit obrázek PowerShellem. Já jsem hlavně řešil formát a kvalitu JPG (v příkladu 90%).

Add-Type -AssemblyName System.Drawing 
$img = New-Object System.Drawing.Bitmap(96, 96)
([System.Drawing.Graphics]::FromImage($img)).DrawImage([System.Drawing.Image]::FromFile((Get-Item D:\bouska.jpg)), 0, 0, 96, 96)
$jpegCodecInfo = [System.Drawing.Imaging.ImageCodecInfo]::GetImageEncoders() | where {$_.MimeType -eq 'image/jpeg'}
$encoderParams = New-Object System.Drawing.Imaging.EncoderParameters(1)
$encoderParams.Param[0] = New-Object System.Drawing.Imaging.EncoderParameter([System.Drawing.Imaging.Encoder]::Quality, 90)
$img.Save("D:\bouska2.jpg", $jpegCodecInfo, $encoderParams)
$img.Dispose()

Načtení informací

Můžeme se podívat, kdo má obsah v atributu thumbnailPhoto, tedy nahrané foto v AD DS.

Get-ADUser -Filter * -Properties thumbnailphoto | FT Name, thumbnailPhoto

Můžeme zkusit EMS cmdlet, který vrací informace o uživatelské fotografii. V praxi mohou nastat čtyři situace:

  • uživatel nemá poštovní schránku
PS D:\> Get-UserPhoto operator

The operation couldn't be performed because object 'operator' couldn't be found on 'dc.firma.local'.
  • uživatel nemá žádnou fotografii (ani v AD DS)
PS D:\> Get-UserPhoto jan.bilek

There is no photo stored here..
  • uživatel má nahranou fotku v atributu thumbnailPhoto
PS D:\> Get-UserPhoto novak

SerializationData : {0, 1, 0, 0...}
Identity          : firma.local/Firma/Novák Jan
PictureData       : {255, 216, 255, 224...}
Thumbprint        : 
IsValid           : True
ObjectState       : New
  • uživatel má nastavenu fotku i na Exchange serveru
PS D:\> Get-UserPhoto bouska

SerializationData : {0, 1, 0, 0...}
Identity          : firma.local/Firma/Bouška Petr
PictureData       : {255, 216, 255, 224...}
Thumbprint        : -1379130797
IsValid           : True
ObjectState       : New

Uložení obrázku do souboru

Obsah AD DS atributu thumbnailPhoto můžeme uložit do souboru, čili uložit uživatelovu fotografii.

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

Pokud jsme do atributu přímo uložili obrázek s rozlišením 96 x 96 px, tak se takový stáhne. Pokud jsme použili cmdlet Set-UserPhoto, tak má obrázek stažený rozlišení 64 x 64 px.

Stáhnout můžeme i obrázek ve větším rozlišení z Exchange serveru.

$user = Get-UserPhoto bouska 
$user.PictureData | Set-Content D:\bouska.jpg -Encoding byte 

Pokud se nachází obrázek pouze v AD DS, tak nám tento příkaz vrátí obrázek z AD DS. Pokud jsme nahráli větší obrázek na Exchange, tak se nám stáhne obrázek z Exchange serveru. Ale v tom případě se vždy (tedy pokud existuje) stahuje velikost 240 x 240 px. Myslel jsem, že to znamená, že se vůbec nepoužívá Microsoftem zmiňovaná velikost 648 x 648 px. Ale po dalším pátrání a pokusech jsem zjistil, že patrně se na Exchange server uloží řada různých rozlišení (nebo možná jen to největší možné a online probíhá resize).

Zobrazení obrázků v různém rozlišení

Pro zobrazení fotky uživatele můžeme využít Exchange Web Services (EWS), kde specifikujeme uživatele jeho emailovou adresou a zadáme rozlišení. Info Get user photos by using EWS in Exchange.

https://mail.firma.cz/ews/Exchange.asmx/s/GetUserPhoto?email=bouska@firma.cz&size=HR648x648

Jako rozlišení můžeme použít pouze některou podporovanou hodnotu, jinak dostaneme chybu. Podporovaná rozlišení jsou, dle SizeRequested, HR48x48, HR64x64, HR96X96, HR120X120, HR240X240, HR360X360, HR432X432, HR504X504, HR648X648.

Praktické testy ukazují, že když nahrajeme fotografii, tak se ořízne na čtvercový formát a zmenší na nejbližší nižší podporované rozlišení. Například, když nahrajeme foto 400 x 531 px, tak se upraví na 360 x 360 px. Při zobrazení obrázku v HR360X360, HR432X432, HR504X504, HR648X648 se vždy vrátí foto s rozlišením 360 x 360 px.

Pozn.: Na Exchange serveru existuje složka C:\Program Files\Microsoft\Exchange Server\V15\ClientAccess\photos, patrně jde o cache.

Zablokování změny fotografie uživatelem

Standardně má každý uživatel možnost změny své fotografie ve webovém rozhraní Outlook on the Web. Vede sem i odkaz z aplikace Skype for Business pokud zvolíme Edit Picture. Editace se v OWA nachází v Options - General - My Account. Případně můžeme jen kliknout v pravém horním rohu na profilový obrázek.

Outlook on the Web změna fotografie uživatele

Zabránit editaci obrázku můžeme několika způsoby. Na internetu nalezneme řadu diskusí a článků, třeba Prevent Users from Changing Photo in OWA. Připadá mi nejlepší využití politiky Outlook on the Web Mailbox Policy (OwaMailboxPolicy) a parametru SetPhotoEnabled, Set-OwaMailboxPolicy.

Žil jsem v představě, a na mnoha místech na internetu se to uvádí, že pokud není na schránku nastavena OwaMailboxPolicy, tak se automaticky aplikuje Default politika. Praktický test ale hned ukáže, že tomu tak není. Možná se změnilo chování u Exchange 2013. Jediné oficiální info, které jsem nalezl, že pro Exchange Online se defaultní politika aplikuje na všechny schránky.

Nejlépe se nám bude pracovat v Exchange Management Shell (EMS). Exchange Admin Center (EAC) řadu věcí nepodporuje. Můžeme využít politiku Default, vytvořit novou či různě kombinovat.

Výpis existujících politik OwaMailboxPolicy a hodnot pro fotografie.

PS D:\> Get-OWAMailboxPolicy | FT Name,*Photo*

Name     DisplayPhotosEnabled SetPhotoEnabled SetPhotoURL
----     -------------------- --------------- -----------
Default                  True            True            

Nastavení zákazu editace fotografií pro všechny politiky.

Get-OWAMailboxPolicy | Set-OWAMailboxPolicy -SetPhotoEnabled $False

Výpis, jakou politiku má nastavenu uživatel

PS D:\> Get-CASMailbox bouska | FT Name, OWA*

Name        OwaMailboxPolicy OWAEnabled OWAforDevicesEnabled
----        ---------------- ---------- --------------------
Bouška Petr                        True                 True

Výpis uživatelů, kteří mají přiřazenu politiku Default.

Get-CASMailbox | Where-Object { $_.OwaMailboxPolicy -like 'Default' } | FT Name, OWA*

Výpis uživatelů, kteří nemají přiřazenu politiku.

Get-CASMailbox | Where-Object { $_.OwaMailboxPolicy -eq $null } | FT Name, OWA*

Přiřazení politiky Default určitému uživateli.

Set-CASMailbox bouska -OwaMailboxPolicy Default

Přiřazení politiky Default všem uživatelům, kteří nemají přiřazenu žádnou politiku.

Get-CASMailbox | Where-Object { $_.OwaMailboxPolicy -eq $null } | Set-CASMailbox -OwaMailboxPolicy Default

Související články:

Microsoft Exchange

Skoro od začátku mé praxe se věnuji administraci poštovního serveru od firmy Microsoft, tedy Exchange Serveru. Začínal jsem na verzi 2003 a dostal se až k Exchange Online. Články popisují mnoho oblastí správy. Nejvíce od migrace na Exchange Server 2016 a jeho kompletní konfiguraci. Ale také Exchange Hybrid a bezpečnost elektronické pošty.

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

Komentáře

Zatím zde nejsou žádné komentáře.

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