В Active Directory (AD) для учетной записи пользователя есть возможность использовать атрибут thumbnailPhoto для хранения фотографии пользователя в виде двоичных данных. В рамках этой заметки мы рассмотрим процедуру настройки импорта значений этого атрибута в свойство профиля пользователя в Службе профилей SharePoint Server 2013 для дальнейшего отображения фотографий пользователей на веб-сайтах SharePoint.
Убедившись в том, что фотографии пользователей установлены в 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)
После окончания процесса синхронизации нам необходимо дополнительно выполнить служебную процедуру обновления хранилища фотографий профилей 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 и на следующий день проверяем результат.