SharePoint 2013 - Отключаем отслеживание действий пользователя

imageКогда один пользователь SharePoint 2013 открывает свойства другого пользователя, он может подписаться на получение сведений об активностях  этого самого пользователя в рамках SharePoint. В конфигурации по умолчанию профили пользователей настроены таким образом, что когда какой-то другой пользователь создаёт такую подписку, – отслеживаемый пользователь получает об этом уведомление в почту.

Например пользователь Артур Пирожков через поиск нашёл пользователя Максимов Алексей, вошёл в свойства его учетной записи и щелкнул по ссылке “отслеживать этого пользователя”…

image

После этого пользователь Максимов Алексей получит от SharePoint письмо с уведомлением о том, что его начал отслеживать пользователь Артур Пирожков примерно в следующем виде…

image

Если в организации не было проведено обучение пользователей на предмет базовой функциональности SharePoint то получение подобного письма может ввести некоторых пользователей мягко говоря в состояние ступора. В результате округлённые глаза, возмущение что кто-то там мол за мной следит, запросы в тех.поддержку и т.п.

Чтобы не получать подобные сообщения пользователь самостоятельно может отключить в свойствах своего профиля параметры подписки на уведомления включенные по умолчанию

image

Однако чтобы в дальнейшем не пугать всех других неподготовленных пользователей подобными письмами мы можем выполнить 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

В результате работы скрипта в свойствах всех обработанных профилей получится соответствующий результат…

image

Если в процессе запуска скрипта вы получите исключение типа

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)

image

Если говорить о предмете заметки, то есть и другое решение – отключить возможность управления профилями на уровне службы профилей (Central Administration > Manage service applications > User Profile Service Application > Manage User Permissions).

image

Тогда пользователи не смогут управлять своими профилями и в том числе включать слежение за другими пользователями, но такое решение далеко не всегда бывает приемлемым…

Всего комментариев: 6 Комментировать

  1. Константин /

    Спасибо за статью! Скажите пожалуйста, этот скрип отключит галочки только тем кто хоть раз заходил "Лента новостей" или "ФИО - ОБО мне" ? Или все пользователям домена? Потому как я могу подписаться на человека который еще не разу не заходил на портал и не имет там своего сайта (профиля)

  2. Алексей Максимов / Автор записи

    Для всех профилей

  3. Константин /

    понял, подскажите еще пожалуйста, в котором месте можно изменить шаблон сообщения которое приходит по почте, пользователю на которого подписались. Спасибо.

  4. Александр /

    Скрипт выдает ошибку про строку foreach ($Profile in $Profiles) - Missing statement body in foreach loop

  5. Александр /

    Логика 6 галочек
    Значение:
    2 - снимает 1 галку
    4 - снимает 2 галку
    8 - снимает 3 галку
    16 - снимает 4 галку
    32 - снимает 5 галку
    64 - снимает 6 галку
    128-ставит опять все
    126-снимает все
    Значения используются только четные, потыкайтесь, поймете логику

  6. Алексей Максимов / Автор записи

    Решение так же работает для SharePoint Server 2016/2019

Добавить комментарий