none
SharePoint Server 2013 full crawl people removed some users (полный обход по людям удаляет профили) RRS feed

  • Вопрос

  • Добрый день! Есть такая необычная ситуация с некоторыми профилями пользователей.

    Всего в ферме порядка 30 000 пользователей. Недавно стали замечать, что профиль не сохряняется. У двух как минимум пользователей. Оказалось, он создаётся, но при полном обходе sps3s://mysite - эти профили странным образом удаляются!

    Уже потратили много дней, только чтобы понять когда это происходит. При этом пользователи создаются, sid совпадают с доменными и всё ОК, пока не происходит полный обход.

    Уже не знаю, куда копать, занимаюсь шариком больше 8 лет, но такое вижу впервые. Начальство требует процесс обхода "изнутри", но на сайте МС технической информации не нашёл.

    15 октября 2019 г. 14:34

Все ответы

  • добрый день

    может создать отдельную учетку для обхода с правами только на чтение UPS?


    мой блог не много о SharePoint

    16 октября 2019 г. 5:38
    Модератор
  • Интересная мысль. Можно подумать, да. Но странно, что проблемы только с этими 2 профилями из 30 000. Создать новые профили не вариант.

    Но если будут права только на чтение, как обходчик будет актуализировать данные по профилям и всем семействам? Пригодилась бы статья что технически просходит при полном обходе людей, на какие атрибуты смотрит обходчик, почему может удалить и пр. Вот такую найти не могу.

    16 октября 2019 г. 7:59
  • Вообще учетная запись для обхода имеет права только на чтение вроде как, но надо проверить. Я больше склоняюсь что это какой-то странный баг, профили эти пересекаются. Когда создается один, например, добавляется фото. Потом входит второй пользователь - создаётся его профиль. И иногда в параметрах еще до обхода на сайте в профили № 2 отображается информация из профиля № 1, даже фото. Только логин другой, т.е. есть ощущение что ошибка в них, но с виду они нормальные. И удаляются они не планово, а из-за какой-то внутренний ошибки. Опять же смотрел Sid, SystemUserKey, GuidID и прочее, так же проверял в домене - пересечений нет.
    16 октября 2019 г. 8:32
  • Но если будут права только на чтение, как обходчик будет актуализировать данные по профилям и всем семействам? Пригодилась бы статья что технически просходит при полном обходе людей, на какие атрибуты смотрит обходчик, почему может удалить и пр. Вот такую найти не могу.

    как совет. можно разнести на два источника контента поиска:

    1. people

    2. обычный контент

    на выходе можно более гибко управлять обходами. 

    после создания учетки для обхода дайте доступ на чтение на уровне веб приложения.

    какие свойство обходит можно посмотреть через схему поиска (тернистый путь).

    про удаления первый раз слышу. очень странно.


    мой блог не много о SharePoint

    16 октября 2019 г. 8:32
    Модератор
  • Да в том-то и дело, что обход контента и людей разнесён, учетка одна, лет 5 не менялось и такого не наблюдалось никогда. Создать новые учётки не вариант, т.к. много в каких смежных системах они используются(( И глючат только на портале.

    Я пробовал по этой статье понять что происходит, судя по всему обходчик запускает какие-то хранимые процедуры (proc_MSS_Crawl и т.п.) на уровне БД, а не работает с профилями через объектную модель.

    При этом UPS коннектор настроен, но не используется, т.к. при количестве пользователей больше 30 000 мс не рекомендует использовать синхронизацию с AD, т.к. она может выполняться "вечно". Т.е. работает только служба профилей, а служба синхронизации отключена. И подключение в службе профилей пользователей не создавалось.

    В журнале обхода контента есть записи о пользователях (точнее url-ах), сначала в успешных, а потом в удаленных, для одного и того же профиля:

    В успешных: https://mysites/Person.aspx?accountname=TEST\person1 - Обход выполнен

    В удалённых: https://mysites/Person.aspx?accountname=TEST\person1 - Было удалено средством сбора данных ( This item was deleted because the crawler did not encounter it during the last incremental crawl. )

    Причём после полного обхода видно что записи прям удаляются из БД из таблицы [ProfileDB].[upa].[UserProfile_Full]. Личные сайты при этом не удаляются и остаются висеть, и после очередного входа на портал, профиль создаётся, а вот сайт нет, т.к. по такому url уже есть, и чтобы не было ошибки (вечной попытки создания ЛС), приходится его удалять и тогда сайт успешно создаётся и профили живут, но до следующего полного обхода.


    16 октября 2019 г. 9:56
  • а как вы синхнонизируете пользователей?

    у меня 2016 и нет MIM я использую скрипт PowerShell


    мой блог не много о SharePoint

    16 октября 2019 г. 13:09
    Модератор
  • У нас 2013, тоже скриптом PowerShell. При этом если надо принудительно, то Get-SPUser ... -SyncFromAD работает. При этом некоторые свойства загружаются из сторонней БД.
    16 октября 2019 г. 14:29
  • а как вы синхнонизируете пользователей?

    у меня 2016 и нет MIM я использую скрипт PowerShell


    мой блог не много о SharePoint

    Добрый день, а можно скрипт по синхронизации с AD через PowerShell обнародовать? Хочу отказаться от MIM.
    20 октября 2019 г. 7:59
  • 20 октября 2019 г. 20:13
    Модератор
  • вот пожалуйста

    Обновление фотографий пользователей из AD (SharePoint 2016)


    мой блог не много о SharePoint

    А если нужно просто выгрузить данные из AD в User Profiles без фото?
    23 октября 2019 г. 13:00
  • $MySiteUrl = "https://my.company.ru"
    $domain = "My-CORP\"
    $domainOU = "DC=my-corp,DC=local"
     
    if((Get-PSSnapin | Where {$_.Name -eq "Microsoft.SharePoint.PowerShell"}) -eq $null) {
     Add-PSSnapin Microsoft.SharePoint.PowerShell;
    }
     
    cls
     
    #Старт полной синхронизации
    $upa = Get-SPServiceApplication | where {$_.TypeName -eq "User Profile Service Application"}
    $upa.StartImport($true)
     
     Write-Host "Удаление не синхронизированных пользователей." -ForegroundColor Green
    Set-SPProfileServiceApplication -Identity $upa -PurgeNonImportedObjects $true
    #Set-SPProfileServiceApplication -Identity $upa -GetNonImportedObjects $true
     
     
    Write-Host "Обновление свойств пользователя."
    $context = Get-SPServiceContext($MySiteUrl)
    $profileManager = New-Object Microsoft.Office.Server.UserProfiles.UserProfileManager($context)
    $users =  $profileManager.GetEnumerator()
    $count = 0
    foreach($user in $users){
        $userLogin = ($user.AccountName).Replace($domain,"")
        $count = $count + 1
        Write-Progress -Activity "Обновление свойств пользователя " -status "текущий пользователь № $count" -percentComplete ($count /  $profileManager.Count * 100)
          
        $userAD = Get-ADUser -Identity  $userLogin  -Properties "Company"
        if($userAD.Company -ne $null -and $userAD.Company -ne "" ){
           # Write-Host $user.DisplayName //  $userAD.Company -ForegroundColor Green
            $user["Company"].Value = $userAD.Company
            $user.Commit()
               
        }     
    }
     

    нужно заполнить 

    $MySiteUrl="https://my.company.ru"

    $domain="My-CORP\"

    $domainOU="DC=my-corp,DC=local"

     
     


    мой блог не много о SharePoint



    24 октября 2019 г. 6:13
    Модератор
  • в данном случае будет синхронизировано одно свойство Company.


    мой блог не много о SharePoint

    24 октября 2019 г. 6:15
    Модератор
  • в данном случае будет синхронизировано одно свойство Company.


    мой блог не много о SharePoint

    Спасибо Владимир, не совсем понятно зачем нужен URL $MySiteUrl="https://my.company.ru"

    это страница URL профилей пользователей для UPSS или Root коллекции SharePoint?

    24 октября 2019 г. 8:46
  • он обращается к веб-приложению на котором захостена служба пользователей. и потом получает профили пользователей.


    мой блог не много о SharePoint

    24 октября 2019 г. 9:35
    Модератор
  • он обращается к веб-приложению на котором захостена служба пользователей. и потом получает профили пользователей.


    мой блог не много о SharePoint

    Владимир подскажи, а есть ли какой Get запрос к UPS, чтобы пользователей например в форму через Autocomplete добавлять? Сразу скажу PeoplePicker исключается полностью.
    24 октября 2019 г. 11:06
  • точно сказать не могу.

    через rest api нужно знать логин. 

    SharePoint: Get User Profile Properties with REST API

    через серверную часть можно делать поиск по части слова 

    $site = Get-SPSite $mySiteUrl 
    $context = Get-SPServiceContext $site 
    $profileManager = New-Object Microsoft.Office.Server.UserProfiles.UserProfileManager($context) 
    $user =  $profileManager.Search( ' текст поиска ')


    мой блог не много о SharePoint

    25 октября 2019 г. 5:41
    Модератор
  • Коллеги - это хороший ответ, но не ответ на вопрос темы) Что не удивительно, потому что я задавал вопрос поддержки МС, но они тоже не смогли ничего решить/предложить)))
    20 ноября 2019 г. 8:27