Обновление пользовательских профилей с помощью PowerShell

На одном из проектов в процессе переноса фермы SharePoint с одной инфраструктуры на другую была обнаружена мелкая неприятность, связанная с переносом базы данных контента приложения с пользовательскими профилями службы “User Profile Service Application”. Проблема заключалась в том, что ссылки на пользовательские изображения были не относительными, а полными и после переноса стали невалидными. Не могу сказать, что проблема серьезная, но на ее примере можно рассмотреть возможности работы с пользовательскими профилями через объектную модель.

Указанный ниже пример осуществляет обновление урла на изображение пользователя.

function UpdateUserProfiles ($OldSiteUrl, $NewLocationUrl)
{
    $Site = Get-SPSite "$NewLocationUrl"
    $ServiceContext = Get-SPServiceContext($Site)
    $ProfileManager = new-object Microsoft.Office.Server.UserProfiles.UserProfileManager($ServiceContext)
    $Profiles = $ProfileManager.GetEnumerator()

    foreach($profile in $Profiles){
        if ($profile["PictureUrl"].Value){
            if($profile["PictureUrl"].Value.StartsWith("$OldSiteUrl")){
                $accountName = $profile["AccountName"].Value;            
                try
                {                
                    $img = $profile["PictureUrl"].Value.Replace($OldSiteUrl, $NewLocationUrl)
                    $profile["PictureUrl"].Value = $img;
                    $profile.Commit()
                    
                    Write-Host "Profile $accountName updated. Image Url: $img" -ForegroundColor Green
                }
                catch
                {
                    Write-Host "Profile $accountName update error. $_" -ForegroundColor Green                
                }
                Write-Host "";                
            }
        }
    }
}

UpdateUserProfiles "http://old_server_host:port/siteUrl" "http://new_server_host:port/NewSiteUrl"

Опубликовано: 05.01.2014
Автор: Сергей Снитко