[void][reflection.assembly]::Loadwithpartialname("Microsoft.SharePoint") | out-null [void][reflection.assembly]::Loadwithpartialname("Microsoft.Office.Server") | out-null # Function: Get-UserProfileConfigManager # Description: return a UserProfileConfigManager object which is used for management of User Profiles function Get-UserProfileConfigManager() { PARAM ( [string]$PortalURL = $( throw "You must provide a Site Collection URL, e.g. 'http://machine/'") ) $site=new-object Microsoft.SharePoint.SPSite($PortalURL) $servicecontext=[Microsoft.SharePoint.SPServiceContext]::GetContext($site) $site.Dispose() # clean up # Return the UserProfileConfigManager new-object Microsoft.Office.Server.UserProfiles.UserProfileConfigmanager($serviceContext) } # Function: Get-SPProfileManager # Description: Return a UserProfileManager object which is used for accessing MOSS User Profiles function Get-SPProfileManager() { PARAM ( [string]$PortalURL = $( throw "You must provide a Site Collection Url e.g. 'http://machine/'") ) $site=new-object Microsoft.SharePoint.SPSite($PortalURL) $serviceContext=[Microsoft.SharePoint.SPServiceContext]::GetContext($site) $site.Dispose() # clean up # Return the UserProfileManager new-object Microsoft.Office.Server.UserProfiles.UserProfileManager($serviceContext) } # Function: Start-ProfileSynchronization -PortalURL [-Full] # Description: Start profile synchronization function Start-ProfileSynchronization { PARAM ( [string]$PortalURL = $(throw "You must provide a site collection URL (e.g. http://machine)"), [switch]$Full ) $configMgr = Get-UserProfileConfigManager -PortalURL $PortalURL if ($configMgr -eq $null) { Write-Error "UserProfileConfigManager is NULL" return } if ($configMgr.IsSynchronizationRunning()) { write-Warning "synchronization is still running; wait till it stops" return } else { if ($Full) { Write-Output "starting full synchronization" $configMgr.StartSynchronization($true) } else { Write-Output "starting incremental synchronization" $configMgr.StartSynchronization() } } } # Function: Stop-ProfileSynchronization -PortalURL # Description: Stop profile synchronization function Stop-ProfileSynchronization { PARAM ( [string]$PortalURL = $(throw "You must provide a site collection URL (e.g. http://machine)") ) $configMgr = Get-UserProfileConfigManager -PortalURL $PortalURL if ($configMgr -eq $null) { Write-Error "UserProfileConfigManager is NULL" return } if (-Not $configMgr.IsSynchronizationRunning()) { write-Warning "synchronization is not running" return } else { Write-Output "Stopping profile synchronization run..." $configMgr.StopSynchronization() } } # Function: Start-ProfileSynchronizationService -ProfileApplicationName [-Machine] -Password # Description: start profile synchronization service on a server function Start-ProfileSynchronizationService { PARAM ( [string] $ProfileApplication = $(throw "You must provide a user profile service application name"), [string] $Machine, [string] $Password = $(throw "You must enter the password of the farm account (SharePoint timer service account)") ) $upaApp = Get-SPServiceApplication | ? {$_.name -like $ProfileApplication} if ($upaApp -eq $null) { Write-Error "Cannot get user profile service application. Please make sure the user profile application name is correct." return } if ($Machine -eq $null -Or $Machine -eq "") { # get the current machine $Machine = [System.Environment]::MachineName } $syncService = Get-SPServiceInstance | ? {$_.typeName -like "User Profile Synchronization Service" -And $_.Server.Address -like $Machine} if ($syncService -eq $null) { Write-Error "Cannot get user profile synchronization service instance." return } if ($syncService.Status -eq "Online") { Write-Warning "The profile synchronization service is already running. Starting it again" } ## get default timer service account $serviceAccount = (Get-SPFarm).DefaultServiceAccount Write-Output([System.String]::Format("Starting profile synchronization service on machine {0} for UPA {1}; service account is {2}", $Machine, $upaApp.Name, $serviceAccount.Name)) $upaApp.SetSynchronizationMachine($Machine, $syncService.Id, $serviceAccount.Name, $Password) } function Stop-ProfileSynchronizationService { PARAM ( [string] $ProfileApplication = $(throw "You must provide a user profile service application name") ) $upaApp = Get-SPServiceApplication | ? {$_.name -like $ProfileApplication} if ($upaApp -eq $null) { Write-Error "Cannot get user profile service application. Please make sure the user profile application name is correct." return } $upaApp.ResetSynchronizationMachine() } ##Start Full Synchronization: Start-ProfileSynchronization -PortalURL http://machine -Full ##Start Incremental Synchronization: Start-ProfileSynchronization -PortalURL http://machine ##Stop Full Synchronization: Stop-ProfileSynchronization -PortalURL http://machine -Full ##Start profile synchronization service: Start-ProfileSynchronizationService -ProfileApplication UPAName -Machine machine -Password ##Stop profile synchronization service: Stop-ProfileSynchronizationService -ProfileApplication