Nous avons vu dans un précédent sujet comment forcer l’import des Profils utilisateurs via PowerShell, cette procédure permet de palier une erreur survenue après la mise à jour de ma ferme SharePoint.
Problématique
Ce même soucis est aussi présent pour les Audiences, comme on le voit dans la fenêtre suivante :
Avec le message suivant :
An error has occurred while accessing SQL database or system resources. If this is the first time you have seen this message, please try again later. If this problem persists, please contact your administrator.
De la même façon que pour les profils utilisateur, j’ai cherché une solution permettant de se passer du planificateur de SharePoint qui ne fonctionne plus.
Work Around utilisé
La solution a donc bien évidemment été de passer par un script PowerShell pour forcer la compilation (mise à jour) de toutes les Audiences. Cette compilation se fait bien pour chaque audience manuellement mais non globalement.
La solution est toujours basée sur un script simple disponible sur le projet CodePlex :
Mais associée au parcours de l’ensemble des Audiences disponibles afin de lancer la compilation de chaque Audience.
Le script résultant est composé de deux fonctions simples :
function Compile-SharePointAudience([string]$PortalURLtoCompile, [string]$AudienceName)
{
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint") > $null
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.Office.Server") > $null
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.Office.Server.Search.Administration") > $null
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.Office.Server.Audience") > $nullWrite-Host "PortalURLtoCompile", $PortalURLtoCompile
$sitetoCompile = new-object Microsoft.SharePoint.SPSite($PortalURLtoCompile)
$searchContext = [Microsoft.Office.Server.Search.Administration.SearchContext]::GetContext($sitetoCompile)[Array]$args = $searchContext.Name, "1", "1", $AudienceName
[int]$runjob = [Microsoft.Office.Server.Audience.AudienceJob]::RunAudienceJob($args)
$sitetoCompile.Dispose()return $runjob
}function Refresh-Audiences([string]$MyPortalURL)
{
Write-Host "MyPortalURL", $MyPortalURL[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint") > $null
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.Office.Server.Audience") > $null$site = new-object Microsoft.SharePoint.SPSite($MyPortalURL)
$web = $site.openweb()
$srvContext = [Microsoft.Office.Server.ServerContext]::GetContext($site)[Microsoft.Office.Server.Audience.Audience]$myAudience = $null
[Microsoft.Office.Server.Audience.AudienceManager]$audManager = new-object Microsoft.Office.Server.Audience.AudienceManager($srvContext)
[Microsoft.Office.Server.Audience.AudienceCollection]$audCollection = $audManager.Audiences
foreach($myAudience in $audCollection)
{
Write-Host "Audience Name:", $myAudience.AudienceName, "- Last Compile:", $myAudience.LastCompilation
Compile-SharePointAudience $MyPortalURL $myAudience.AudienceName
}
Write-Host " -------------------------------- "
$web.Dispose()
$site.Dispose()
}
Refresh-Audiences “http://MyPortalWebApplication”
Vous pouvez alors planifier l’exécution de ce script toutes les nuits afin que chaque utilisateur puisse avoir les vues associées à ses paramètres et aux audiences appliquées.
Il est aussi ajouté au site CodePlex comme les scripts précédents :
Romelard Fabrice [MVP]
Commentaires
Enregistrer un commentaire