Когда один пользователь 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).
Тогда пользователи не смогут управлять своими профилями и в том числе включать слежение за другими пользователями, но такое решение далеко не всегда бывает приемлемым…
RSS - Записи
Спасибо за статью! Скажите пожалуйста, этот скрип отключит галочки только тем кто хоть раз заходил "Лента новостей" или "ФИО - ОБО мне" ? Или все пользователям домена? Потому как я могу подписаться на человека который еще не разу не заходил на портал и не имет там своего сайта (профиля)
Для всех профилей
понял, подскажите еще пожалуйста, в котором месте можно изменить шаблон сообщения которое приходит по почте, пользователю на которого подписались. Спасибо.
Скрипт выдает ошибку про строку 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