How to fix broken images after mySite URL change in SharePoint 2010?

Posted by on Jan 27, 2012 in Powershell, Sharepoint Server | 9 comments

Here is a small PowerShell script to fix the pictureurl for all userprofiles after changing the mySite Url:

$mySiteWebapplicationUrl = "https://mysite.normanbauer.com/"
#current Url of your mySite website

$mySiteOldUrlValue = "http://mysitetest:80/"
#former Url where your pictures do not reside any more

$mySiteNewUrlValue = "https://mysite.normanbauer.com:443/"
#current Url where your images can be found now

$mySite = Get-SPSite $mySiteWebapplicationUrl
$SPServiceContext = Get-SPServiceContext $mySite
$userProfileManager = New-Object Microsoft.Office.Server.UserProfiles.UserProfileManager($SPServiceContext)
$userProfiles = $userProfileManager.GetEnumerator()

foreach ($userProfile in $userProfiles)
{
  #if pictureurl is not empty replace the old url part with the new one
  if ($userProfile["PictureURL"] -ne '')
  {
    $oldPictureUrl = $userProfile["PictureURL"].toString()
    $newPictureUrl = $oldPictureUrl -Replace $mySiteOldUrlValue, $mySiteNewUrlValue
    write-host "oldPictureUrl = " $oldPictureUrl " --> newPictureUrl = " $newPictureUrl
    $userProfile["PictureURL"].Value = $newPictureUrl
    $userProfile.Commit()
  } 
}

9 Comments

  1. Hey,

    Awesome script really saved me!! I just had to fix one minor thing:

    $userProfiles = $profileManager.GetEnumerator()

    This line should actually be:
    $userProfiles = $userprofileManager.GetEnumerator()

    As that is the variable created by the previous statement.

    Thanks,
    Andreas

  2. Oh thanks. I fixed that one.

  3. Hi,

    I’ve just changed the URL of the My Site, and I’m having a bit of issues with this script, since I’m a complete newbie to Powershell.

    When trying to run the script I’m getting prompted for TypeName, could you tell me what I’m doing wrong here? Thanks!

  4. Thanks a lot for this script, saved me heaps of trouble!
    In regards to the comment above, I was getting some errors due to the fact that I wasn’t running the script as a user with permissions to change the MySite.

  5. @Peter
    You’re welcome… At least I did not mention that you better run this script in a Powershell elevated by a farm administrator. Thanks for the hint on that.

  6. I was having trouble changing my URL from http://portal/my/ to http://portal/ – The script ran fine, but the old and new URLS were the same. I changed this line:

    $newPictureUrl = $oldPictureUrl.Replace($mySiteOldUrlValue, $mySiteNewUrlValue)

    to

    $newPictureUrl = $oldPictureUrl -Replace($mySiteOldUrlValue, $mySiteNewUrlValue)

    and everything worked.

  7. I have run this script and it completes without errors, but I noticed the path for some of the photos is:
    oldPictureUrl = https://mysite.companyname.net/user photos/profile picturesUser Photos/Profile Pictures/me_MThumb.jpg –> newPictureUrl = https://mysite.companyname.net/user photos/profile picturesUser Photos/Profile Pictures/me_MThumb.jpg

    Any ideas how I can correct the duplicate path? If I manually remove the duplicate user photos/profile pictures (so that there is only 1 in the path) then it displays the picture in the browser.

    Any help would be greatly appreciated.

  8. @Duane Alleman
    You could simply edit the script not to replace old vs. new url but replace that “double” url:

    $newPictureUrl = $oldPictureUrl -Replace "user photos/profile picturesUser Photos/Profile Pictures", "user photos/profile pictures"
    
  9. @Jonathon McDougall
    Thanks for the hint, I changed that.

Trackbacks/Pingbacks

  1. SharePoint Tips - Secrets of SharePoint - - [...] How to fix broken images after MySite URL change in SharePoint 2010 [...]
  2. Sharepoint 2013 site http to https and full FQN | IT Blog by Joni Mattila - […] http://www.normanbauer.com/2012/01/27/how-to-fix-broken-images-after-mysite-url-change-in-sharepoint… […]

Leave a Reply

Your email address will not be published. Required fields are marked *

Captcha: * Time limit is exhausted. Please reload CAPTCHA.