Когда один пользователь SharePoint 2013 открывает свойства другого пользователя, он может подписаться на получение сведений об активностях этого самого пользователя в рамках SharePoint. В конфигурации по умолчанию профили пользователей настроены таким образом, что когда какой-то другой пользователь создаёт такую подписку, – отслеживаемый пользователь получает об этом уведомление в почту.
Например пользователь Артур Пирожков через поиск нашёл пользователя Максимов Алексей, вошёл в свойства его учетной записи и щелкнул по ссылке “отслеживать этого пользователя”…
После этого пользователь Максимов Алексей получит от SharePoint письмо с уведомлением о том, что его начал отслеживать пользователь Артур Пирожков примерно в следующем виде…
Если в организации не было проведено обучение пользователей на предмет базовой функциональности SharePoint то получение подобного письма может ввести некоторых пользователей мягко говоря в состояние ступора. В результате округлённые глаза, возмущение что кто-то там мол за мной следит, запросы в тех.поддержку и т.п.
Чтобы не получать подобные сообщения пользователь самостоятельно может отключить в свойствах своего профиля параметры подписки на уведомления включенные по умолчанию
Однако чтобы в дальнейшем не пугать всех других неподготовленных пользователей подобными письмами мы можем выполнить PowerShell скрипт который отключит первую галочку для всех профилей пользователей. Задача немного осложняется тем, что в SharePoint 2013 опции уведомления хранятся в свойствах профиля пользователя в параметре SPS-EmailOptin в виде одного числа, которое меняется в зависимости от разных комбинаций включения/выключения этих опций. Опытным путём удалось установить что когда включены все галки то значение этого параметра равно 0, когда включены все кроме верхней, – значение равно 2. Таким образом получился скрипт, который проверяет значение этого параметра и если оно равно 0, то предполагается что пользователь самостоятельно не изменял себе эти настройки и мы можем выставить это значение в нужное нам – 2.
$snapin = Get-PSSnapin | Where-Object {$_.Name -eq 'Microsoft.SharePoint.Powershell'}
if ($snapin -eq $null)
{
Add-PSSnapin "Microsoft.SharePoint.Powershell"
}
$Site = Get-SPSite "http://site.holding.com"
$ServiceContext = Get-SPServiceContext($Site)
$ProfileManager = new-object Microsoft.Office.Server.UserProfiles.UserProfileManager($ServiceContext)
$Profiles = $ProfileManager.GetEnumerator()
$i = 0
foreach ($Profile in $Profiles)
{
## Раскомментировать если надо поменять значение только для конкретного пользователя
#if ($Profile.AccountName -ne "DOMartur")
#{
# continue
#}
if ($Profile["SPS-EmailOptin"].Value -eq 0)
{
$Profile["SPS-EmailOptin"].Value = 2
$Profile.Commit()
$i++
}
else
{
write-host "Для профиля" $Profile.AccountName "заданы персональные настройки оповещений."
}
}
write-host "Изменено профилей: " $i
В результате работы скрипта в свойствах всех обработанных профилей получится соответствующий результат…
Если в процессе запуска скрипта вы получите исключение типа
New-Object : Exception calling ".ctor" with "1" argument(s): "UserProfileApplicationNotAvailableException_Logging :: UserProfileApplicationPr
oxy.ApplicationProperties ProfilePropertyCache does not have 5bde42f903d6..."
At line:18 char:19
+ $ProfileManager = New-Object Microsoft.Office.Server.UserProfiles.UserProfileMan ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [New-Object], MethodInvocationException
+ FullyQualifiedErrorId : ConstructorInvokedThrowException,Microsoft.PowerShell.Commands.NewObjectCommand
это может означать что у учетной записи от имени которой вы пытаетесь выполнить скрипт нет полных прав доступа к службе профилей. Чтобы исправить ситуацию нужно включить Full Control для соответствующей учетной записи (Central Administration > Manage service applications > ставим курсор на User Profile Service Application > в ленте нажимаем кнопку Permissions)
Если говорить о предмете заметки, то есть и другое решение – отключить возможность управления профилями на уровне службы профилей (Central Administration > Manage service applications > User Profile Service Application > Manage User Permissions).
Тогда пользователи не смогут управлять своими профилями и в том числе включать слежение за другими пользователями, но такое решение далеко не всегда бывает приемлемым…
Спасибо за статью! Скажите пожалуйста, этот скрип отключит галочки только тем кто хоть раз заходил "Лента новостей" или "ФИО - ОБО мне" ? Или все пользователям домена? Потому как я могу подписаться на человека который еще не разу не заходил на портал и не имет там своего сайта (профиля)
Для всех профилей
понял, подскажите еще пожалуйста, в котором месте можно изменить шаблон сообщения которое приходит по почте, пользователю на которого подписались. Спасибо.
Скрипт выдает ошибку про строку foreach ($Profile in $Profiles) - Missing statement body in foreach loop
Логика 6 галочек
Значение:
2 - снимает 1 галку
4 - снимает 2 галку
8 - снимает 3 галку
16 - снимает 4 галку
32 - снимает 5 галку
64 - снимает 6 галку
128-ставит опять все
126-снимает все
Значения используются только четные, потыкайтесь, поймете логику
Решение так же работает для SharePoint Server 2016/2019