Accéder au contenu principal

SharePoint : Forcer la compilation des Audiences via PowerShell

 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") > $null

    Write-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

Posts les plus consultés de ce blog

Redonner vie à une Microsoft Surface RT : le guide ultime vers Linux !

Vous avez une vieille Microsoft Surface RT qui traîne dans un tiroir ? Vous savez, cette tablette de 2012 devenue inutilisable depuis l'abandon officiel de Windows RT par Microsoft ? Ne la jetez surtout pas ! Dans ma dernière vidéo, je vous montre comment transformer cet appareil, autrefois considéré comme un "presse-papier", en une tablette Linux moderne et parfaitement fonctionnelle . Pourquoi ce projet ? L'objectif est simple : transformer ce matériel pour en faire un dashboard dédié à mon système Home Assistant. En installant postmarketOS , une version de Linux spécialement conçue pour les appareils ARM abandonnés, on redonne une seconde jeunesse à cette machine . Ce que vous allez apprendre dans ce tutoriel complet : La libération du matériel : Comment réinstaller la version d'origine pour passer outre les blocages de Windows 8.1 . Jailbreak & Secure Boot : La procédure indispensable pour déverrouiller la machine et permettre l'installation d...

Série de Videos sur Home Assistant intégrant la production Photovoltaïque

 Un certain nombre de vidéos sont en ligne pour intégrer sa production photovoltaïque dans Home Assistant en partant de la base. Installation de Home Assistant: On peut ensuite intégrer les composant des Micro-Onduleurs Enphase, mais aussi les batteries Enphase: Ou encore le composant de contrôle Ecojoko: Ce qui permet alors de faire des comparaisons entre les valeurs capturées: Des videos seront encore publiés dans les prochaines semaines sur différents aspects de cette solution. Fab

Mixer les batteries Enphase et Zendure : La solution ultime pour l'autoconsommation ?

Introduction Vous avez déjà une installation solaire équipée de micro-onduleurs Enphase , mais vous trouvez que le stockage officiel de la marque est trop coûteux ou difficile à installer en DIY ? Vous n'êtes pas seul. Aujourd'hui, je vous partage mon retour d'expérience complet sur une configuration qui intrigue beaucoup de monde : le couplage d'un système Zendure SolarFlow avec un environnement Enphase existant. Pourquoi vouloir mixer ces deux marques ? Le système Enphase est une référence en termes de fiabilité, mais l'ajout de batteries IQ Battery peut représenter un investissement lourd. À l'inverse, Zendure propose avec le SolarFlow une solution de stockage plug-and-play extrêmement flexible et souvent plus abordable. L'idée est simple : utiliser le SolarFlow comme "tampon" entre vos panneaux et vos micro-onduleurs pour stocker l'excédent de la journée et le réinjecter la nuit. Le montage : Est-ce vraiment compliqué ? Dans ma dernière ...