Output User Profile Service Colleagues

131

Output User Profile Service Colleagues

SharePoint User Profile Service maintains the set of colleagues associated with each user registered within the User Profile Service. This is used for a range of social features, and is leveraged by third party products for managing relationships between users. The colleagues are initially defined based on the users with whom a user shares a direct reporting line. Users can then add or remove colleagues.

Below is a PowerShell script to output the set of colleagues for a given user, both into XML and also into a text file in list format.

##This script gets the colleagues for the specified user using the UPS web service , outputting to both XML and txt as a list
$uri="http://mysites.FQDN.com/_vti_bin/UserProfileService.asmx?wsdl"
## $accountName is a string that contains the account name for which you need to get all the colleagues
#$Acct="JPlaut"
$accountName="Domain$($Acct)"
$OutputDir="C:UsersSharePoint ConsultantDocumentsPowerShellUPSReports"

$userProfileWebServiceReference = New-WebServiceProxy -Uri $uri -UseDefaultCredential 
$colleagues=$userProfileWebServiceReference.GetUserColleagues($accountName) 
## Creates an GetUserColleagues.xml file in the D: which contains colleague information for the specified $accountName
$output = New-Object -TypeName System.IO.StreamWriter -ArgumentList "$($OutputDir)GetUserColleagues$($Acct).xml", $false
$output.WriteLine("<?xml version=""1.0"" encoding=""utf-8"" ?>")
$output.WriteLine("<Colleagues>")
foreach($colleague in $colleagues)
{
	$accountName=$colleague.AccountName
	$privacy=$colleague.Privacy
	$name=$colleague.Name
	$isInWorkGroup=$colleague.IsInWorkGroup
	$group=$colleague.Group
	$email=$colleague.Email
	$title=$colleague.Title
	$url=$colleague.Url
	$userProfileId=$colleague.UserProfileId
	$id=$colleague.Id
$output.WriteLine("<Colleague AccountName=""$accountName"" Privacy=""$privacy"" Name=""$name"" IsInWorkGroup=""$isInWorkGroup"" Group=""$group"" Email=""$email"" Title=""$title"" Url=""$url"" UserProfileId=""$userProfileId"" Id=""$id"" >")
	$output.WriteLine("</Colleague>") 
} 
$output.WriteLine("</Colleagues>") 
$output.WriteLine() 
$output.Dispose()

$colleagues > "$($OutputDir)GetUserColleagues$($Acct).txt"

As an added bonus, here’s a command to remove a specific Colleague from a user

$userProfileWebServiceReference.RemoveColleague("Domainuser","domaincolleague")

While SharePoint does a good job of guessing colleagues based on the AD reporting structure, it doesn’t do a great job of keeping them up to date. Colleagues can get out of date. As the AD reporting structure changes, Colleagues can remain, which can cause issues. If you want to reboot colleagues for a user, here’s how:

$userProfileWebServiceReference.RemoveAllColleagues("domain\victim")

Share this entry

One Response

Leave a Reply

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

Table of Contents

Categories

Categories