В Active Directory (AD) для учетной записи пользователя есть возможность использовать атрибут thumbnailPhoto для хранения фотографии пользователя в виде двоичных данных. В рамках этой заметки мы рассмотрим процедуру настройки импорта значений этого атрибута в свойство профиля пользователя в Службе профилей SharePoint Server 2013 для дальнейшего отображения фотографий пользователей на веб-сайтах SharePoint.
Несмотря на то, что максимально допустимый размер значения этого атрибута в AD составляет 100KB, в сети чаще всего можно встретить рекомендации использовать для записи в этот атрибут графические файлы размером не более 10KB с расширением 96x96 пикселей.
Пример того, как с помощью PowerShell можно установить фотографию пользователя в значение выше-обозначенного атрибута в AD:
Import-Module ActiveDirectory $userName = "Felix" $filePath = "C:\Temp\Felix-96x96.png" [byte[]]$img = Get-Content $filePath -encoding byte Get-ADUser -filter {samaccountname -eq $userName} | Set-ADUser -replace @{thumbnailphoto=$img}
После этого установленная фотография начнёт отображаться в таких приложениях, как Outlook и Lync
Помимо Powershell для пакетной установки фотографий в AD можно использовать такие инструменты, как например Exclaimer Outlook Photos.
Убедившись в том, что фотографии пользователей установлены в AD, переходим к настройке Службы профилей SharePoint 2013 на веб-узле Центра администрирования (ЦА) фермы SharePoint по ссылкам: Central Administration > Application Management > Service Applications > Manage service applications. Выбираем приложение User Profile Service Application и в ленте нажимаем Manage
В разделе настроек People выбираем пункт Manage User Properties. В открывшемся списке свойств профиля находим представленное в конфигурации по умолчанию свойство Picture и открываем для него меню действий, где выбираем пункт правки Edit
В открывшейся форме редактирования параметров свойства переходим к разделу Add New Mapping и создаём ассоциацию этого свойства с атрибутом AD thumbnailPhoto с направлением синхронизации (Direction) Import. Чтобы возможность такой настройки была доступна, нами ранее предварительно должно быть сконфигурировано соединение службы профилей со службой каталогов AD, как было описано ранее в заметке Настройка Службы профилей (User Profile Service)
Сохраняем изменения свойства профиля, переходим на главной странице управления Службой профилей в раздел Synchronization и запускаем процедуру полной синхронизации Start Profile Synchronization > Start Full
***
После окончания процесса синхронизации нам необходимо дополнительно выполнить служебную процедуру обновления хранилища фотографий профилей SharePoint. Сделать это нужно с помощью PowerShell, запустив консоль от имени учетной записи фермы - Database Access account, или как её ещё по другому называют SharePoint Farm service account, (в нашем примере s-KOM-AD01-SP-Farm)
Add-PSSnapin Microsoft.SharePoint.PowerShell $MySitesUrl = "http://kom-ad01-sp-mys.holding.com" $MySitesHost = Get-SPSite -Identity $MySitesUrl Update-SPProfilePhotoStore -MySiteHostLocation $MySitesHost -CreateThumbnailsForImportedPhotos:$True
Если выполнять запуск указанного скрипта не от имени учетной записи фермы, а например от имени учетной записи администратора фермы, то, вероятнее всего, мы получим ошибку:
Update-SPProfilePhotoStore : UserProfileApplicationNotAvailableException_Logging :: UserProfileApplicationProxy.ApplicationProperties ProfilePropertyCache does not have f72238cc-....
Это связано с тем, что у учетной записи администратора по умолчанию нет полного доступа к службе профилей.
После выполнения скрипта фотографии пользователей должны начать отображаться в свойствах пользовательского профиля SharePoint.
***
Служба синхронизации профилей SharePoint будет по заданному нами расписанию периодически импортировать значение атрибута из AD. Теперь нам нужно настроить выполнение скрипта обновления хранилища фотографий на периодической основе. Сделать это можно например создав задание в Планировщике задач Windows на том же сервере SharePoint, где выполняется Служба синхронизации профилей.
Немного изменим скрипт, добавив в него возможность логирования выполняемых действий, чтобы в случае возникновения проблем можно было из файла лога получить информацию о возможных причинах. Создадим скрипт, например с полным путём:
C:\Tools\ScheduledScripts\SP2013-Update-SP-Profile-Photo-Store.ps1
и следующим содержимым:
$MySitesUrl = "http://kom-ad01-sp-mys.holding.com" $LogPath = "C:\Tools\ScheduledScripts\SP2013-Update-SP-Profile-Photo-Store.log" $ErrorActionPreference="SilentlyContinue" Stop-Transcript | Out-Null $ErrorActionPreference = "Continue" Start-Transcript -Path $LogPath -Append Add-PSSnapin Microsoft.SharePoint.PowerShell $MySitesHost = Get-SPSite -Identity $MySitesUrl Update-SPProfilePhotoStore -MySiteHostLocation $MySitesHost -CreateThumbnailsForImportedPhotos:$True Stop-Transcript
Создадим лог файл с полным путём:
C:\Tools\ScheduledScripts\SP2013-Update-SP-Profile-Photo-Store.log
Дадим учетной записи фермы полные права на этот лог-файл, чтобы она смогла его изменять.
Теперь проверяем отработку скрипта с запуском от имени учетной записи фермы. Для этого сначала запустим командную строку от имени этой учетной записи:
runas /noprofile /user:KOM\s-KOM-AD01-SP-Farm cmd
В запущенной командной строке выполним запуск нашего скрипта таким же образом, как он будет выполнятся в дальнейшем в Планировщике задач.
powershell.exe -NoProfile -command "C:\Tools\ScheduledScripts\SP2013-Update-SP-Profile-Photo-Store.ps1"
В результате выполнения команды мы должны убедиться в том, что скрипт отработал без ошибок и в файл лога добавлена информация о выполнении скрипта.
Как видим, в нашем случае скрипт отрабатывает без ошибок и поэтому теперь мы можем создать соответствующее задание в Планировщике задач.
Задача будет выполняется вне зависимости от входа в систему от имени учетной записи фермы (потребуется ввод и сохранение её учетных данных)
Время выполнения задачи устанавливаем с учетом того, как настроена Служба синхронизации профилей SharePoint. Например если ежедневная синхронизация с AD настроена на 5 утра, то с учетом времени на её завершение, устанавливаем время выполнения нашего скрипта на 6 утра.
В качестве выполняемого действия вводим проверенную ранее команду запуска PowerShell с соответствующими параметрами.
Для проверки построенной цепочки изменяем фотографию какого-нибудь сотрудника в AD и на следующий день проверяем результат.
Дополнительные источники информации:
- BlumShapiro - Adding Pictures to Active Directory and Show in SharePoint 2013
- The Official Scripting Guys Forum! - How i can update thumbnailPhoto AD attribute with powershell
- Steve Goodman's Exchange & Office 365 Blog - How to batch optimize your Exchange GAL Photos before importing to Active Directory
- Cjwdev - The thumbnailPhoto Active Directory Attribute Explained
- The Exchange Team Blog - GAL Photos in Exchange 2010 and Outlook 2010
Про вы что то попутали. зачем его выполнять на периодической основе? http://technet.microsoft.com/ru-ru/library/ff607547(v=office.15).aspx
Не совсем понял, что Вы хотели сказать.
Спасибо, все реально сработало при использовании синхронизации профиля SP. Единственно, не получилось заставить чтобы он только импортировал данные при синхронизации и не пытался делать экспорт. Временно вышел из положения использованием облегченного импорта в AD, но в этом случае нет возможности сопоставить поля для импорта в управлении свойствами пользователей. Не подскажете как отключить экспорт?
А разве в SharePoint 2013 экспорт по умолчанию включён? Насколько помню нет. И у каждого атрибута есть настройка направления синхронизации Direction (видно на скриншоте). Да и потом немаловажное значение имеет, то как Вы настроили права в домене для учетной записи службы синхронизации. Почитайте про обратную синхронизацию здесь: https://blog.it-kb.ru/2014/04/21/install-two-tier-farm-sharepoint-server-2013-sp1-on-windows-server-2012-r2-part-7-configure-user-profile-service-synchronization-from-active-directory/
Я все делал в соответствии с этой статьей. Единственно, я не дал разрешение#4 на запись объектов а AD. Но при синхронизации после "Active Directory import" следующим шагом он пишет "Sharepoint export". Вот и не пойму откуда он его берет. В управлении свойствами пользователей во всех полях проставлен только import.
Ну тогда, я полагаю, Вам не о чем переживать :)
Алексей, доброго времени суток!
Вначале - спасибо огромное за Ваш цикл статей и блог в целом - он помог решить много чего даже для такого нуба как я... ))
Вопрос касаемо приведенного случая - у меня по какой то причине Свойства профилей пользователей (User Properties), так же как и соединение синхронизации (упоминающееся в одной из соседних веток) - не редактируемы, отображаются как простой текст. Может, подскажете, - где нужно посмотреть/подкрутить, чтоб это исправить?
Изложите проблему подробно (лучше со скриншотами) на форуме.