В процессе использования SharePoint 2013 коллега поправил себе профиль, добавив дополнительные языки:
Установлен Service Pack 1, а
English Language Pack - нет.
Сразу же после применения изменений на всех страницах появлялась ошибка:
Пробовал через PowerShell скопировать поля из работающего профиля в сломанный, это не дало результат.
Исправить удалось удалением профиля, используя PowerShell:
if ((Get-PSSnapin "Microsoft.SharePoint.PowerShell" -ErrorAction SilentlyContinue) -eq $null)
{
Addd-PSSnapin "Microsoft.SharePoint.PowerShell"
}
[void][reflection.assembly]::Loadwithpartialname("Microsoft.Office.Server");
$site=new-object Microsoft.SharePoint.SPSite("http://portal");
$serviceContext = Get-SPServiceContext $site;
$site.Dispose();
$upm = new-object Microsoft.Office.Server.UserProfiles.UserProfileManager($serviceContext);
$upm.RemoveUserProfile("Domain\Account");
Хотя это можно сделать через веб-интерфейс.
Потом на всякий случай удалил пользователя из user information list, для этого я использовал
SharePoint End User Viewer Tool, таким образом проблема была решена.
Но ошибка может сохраняться, если пользователь присутствует на других коллекциях.
Это происходит из-за того, что каждая коллекция сайтов имеет свой список сведений о пользователях. Коллекций может быть очень много. Например, из-за личных сайтов.
Чтобы автоматически удалить из всех коллекций - воспользуйтесь скриптом ниже:
Add-PSSnapin Microsoft.SharePoint.PowerShell
$UserLogin = "i:0#.w|domain\login";
$Sites = Get-SPSite -Limit All
$AllSites = @()
foreach($Site in $Sites)
{
$RootWeb = $Site.RootWeb
If([bool](Get-SPUser -Identity $UserLogin -Web $RootWeb -EA SilentlyContinue) -eq $True)
{
$User = Get-SPUser -Identity $UserLogin -Web $RootWeb
Write-Host ("Удален из " + $RootWeb.Url)
Remove-SPUser -Identity $User -Web $RootWeb -Confirm:$False
$AllSites += $RootWeb.Url
}
else
{
Write("Отсутствует на: " + $RootWeb.Url)
}
}
if(!($AllSites).count -eq 0)
{
Write-Host "Removed user $($UserLogin) from:" -Fore "Magenta"
foreach($S in $AllSites){Write-Host “- $S”}
Write-Host ""
$AllSites = @()
}