SPSecurity.RunWithElevatedPrivileges depuis PowerShell

May 10, 2012

Lorsque l’on travaille avec un script PowerShell, il arrive que l’utilisateur connecté, même en étant administrateur de la ferme, n’ait pas les droits d’accès à telle ou telle ressource.

J’ai eu le cas, par exemple, lors de l’écriture d’un script d’inventaire de template de formulaire InfoPath. Certaines collections de sites, avec du contenu sensible, avait bridé les autorisations.

Pour obtenir tous les droits, il est alors possible d’exploiter la méthode SPSecurity.RunWithElevatedPrivileges directement en PowerShell :

#Chargement de la DLL de Sharepoint
[System.Reflection.Assembly]::Load("Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c") | out-null

function ExploreFarm()
{
    #Code avec tous les droits !
}

# Appel via SPSecurity.RunWithElevatedPrivileges

[Microsoft.SharePoint.SPSecurity]::RunWithElevatedPrivileges({
    ExploreFarm
})

Le script présenté ici est un script pour SharePoint 2007, mais il fonctionnera très bien avec SharePoint 2010 (pensez simplement à changer le numéro de version dans le chargement de l’assembly).