Wednesday, July 25, 2012
PowerShell script to add "Link to a Document" content type to all document libraries
$linkct = "Link to a Document"
$docct = "Document"
Get-SPSite -Limit all | Get-SPWeb -Limit all | ForEach-Object {
$doclibtype =[Microsoft.SharePoint.SPBaseType]::DocumentLibrary
$doclibs = $_.GetListsOfType($doclibtype)
foreach ($doclib in $doclibs)
{
$newdoclib = $_.Lists[$doclib.ID]
if ($newdoclib.AllowContentTypes)
{
$newdoclib.ContentTypesEnabled = $true
$newdoclib.Update()
#Add site content types to the list
if (($newdoclib.ContentTypes[$linkct] -eq $null) -and
($newdoclib.ContentTypes[$docct] -ne $null))
{
$ctToAdd = $_.Site.RootWeb.ContentTypes[$linkct]
$ct = $newdoclib.ContentTypes.Add($ctToAdd)
"Content type " + $ct.Name + " added to list " + $newdoclib.Title
$newdoclib.Update()
}
}
}
}
SharePoint profile image sync issue.
The SharePoint farm I manage is configured to sync the
pictures from SharePoint user profile to AD. Everything was
working like a charm until we decided to upload pictures from an internal
social media system in which users have profile images uploaded to SharePoint
for users with no images in their profile.
I updated the pictures using a powershell script and ran
Update-SPProfilePhotoStore command. I started getting the following errors in
the event log and the Profile Synchronization Service manager:
Synchronization service Manager Error –
MOSS_DELTAIMPORT_GUID stopped-extension-dll-exception
Event Log:
Event ID : 6801
Source: FIMSynchronizationService
The extensible extension returned an
unsupported error.
The stack trace is:
"System.Net.WebException: The remote
server returned an error: (404) Not Found.
at System.Net.WebClient.DownloadDataInternal(Uri address,
WebRequest& request)
at System.Net.WebClient.DownloadData(Uri address)
at Microsoft.Office.Server.UserProfiles.ManagementAgent.ProfileImportExportExtension.DownloadPictures(ProfileChangeData[]
profiles)
at
Microsoft.Office.Server.UserProfiles.ManagementAgent.ProfileImportExportExtension.Microsoft.MetadirectoryServices.IMAExtensibleFileImport.GenerateImportFile(String
fileName, String connectTo, String user, String password,
ConfigParameterCollection configParameters, Boolean fFullImport,
TypeDescriptionCollection types, String& customData)
Forefront Identity Manager
4.0.2450.34"
After trying multiple things and Googling, I came to the
conclusion that the error was due to few rouge images which SharePoint
could not convert. The problem was that I did not know the user with the problematic
image. So, I first got a list of all images from “User Photo” library in
the My Site host
$site = Get-spsite “http://mysitehost”
$web = $site.RootWeb
$list = $web.Lists["User Photos"]
$Folders = $list.RootFolder.SubFolders
foreach ($Folder in $Folders)
{
if ($Folder.Name -ne "Forms") { foreach ($item in $Folder.Files) { $item.Name } }
}
$web.Dispose();
$site.Dispose();
And then I listed down all users who had their profile
images set using the script below:
$site = Get-SPSite "http://mysitehost " $ServiceContext = Get-SPServiceContext($site); $upm = new-object Microsoft.Office.Server.UserProfiles.UserProfileManager($servicecontext)$upm.GetEnumerator() | foreach{ $pictureURL = $_["PictureURL"].Value if (($pictureURL -ne "") -and ($pictureURL -ne $null)) { $_["AccountName"].Value }}
After manipulating the results from both the scripts
using excel to find the unique user ids, I found that couple of users had their
“PictureURL” property set but did not have the corresponding mthum.jpg,
lthumb.jpg and sthumb.jpg files. I came to the conclusion that these were the users who had the offending images, since the system could not create the
corresponding images from the source image.
Next, I set the “PictureURL” property for these 2 users to blank and started
sync again. Viola, it synced the images without any issue.
Subscribe to:
Posts (Atom)