Accueil > PowerShell : connaître les webparts présents sur chaque page SharePoint
Boris Dhambahadour

PowerShell : connaître les webparts présents sur chaque page SharePoint

PowerShell : connaître les webparts présents sur chaque page SharePoint

Dans le cadre d’un projet de Site Internet chez un client, il m’a été demandé de fournir un fichier listant les webparts présents sur chaque page du site SharePoint. Il s’agit d’un site de publication SharePoint 2013.

Pour ce faire, j’ai choisi d’utiliser un script PowerShell qui va analyser toutes les pages du site et de ses sous-sites.

On scanne tous les sites et sous sites de type publication avec une fonction LoadSPSite :

function LoadSPSite()
{
$siteURL = "http://yourSiteUrl"
$site = New-Object Microsoft.SharePoint.SPSite($siteURL)

foreach($web in $site.allwebs)
{
write-output $web.Title
ListWebParts($web)
}
$site.Dispose()
}

La fonction ListWebParts nous permet de naviguer dans toutes les pages et de lister les webparts qui y sont déposés. Je récupère l’URL de la page, le type du webpart et son titre :

function ListWebParts($web) {
if ([Microsoft.SharePoint.Publishing.PublishingWeb]::IsPublishingWeb($web))
{
$webPublish = [Microsoft.SharePoint.Publishing.PublishingWeb]::GetPublishingWeb($web)
$pages = $webPublish.GetPublishingPages()

foreach($page in $pages)
{
$manager = $web.GetLimitedWebPartManager($page.Url, [System.Web.UI.WebControls.WebParts.PersonalizationScope]::Shared)
$webCollection = $manager.WebParts
if($webCollection.Count -ne 0)
{
for($i =0;$i -lt $webCollection.Count; $i++)
{
$sw.writeline($web.url + "/" + $page.url + ";" + $webCollection[$i].GetType().Name+ ";" +    $webCollection[$i].Title )
}
}
}
}
}

Enfin, j’envoie toutes ces informations dans un fichier de type .csv afin qu’elles soient exploitées facilement sous Excel :

$sw = New-Object System.IO.StreamWriter("c:\temp\ListOfWP.csv")
$sw.writeline("Page URL;Web Part Type;Web Part Title")
LoadSPSite
$sw.close()

Voici un exemple de résultats qu’on peut avoir :
at

Voici le script complet :

Add-PSSnapin Microsoft.SharePoint.PowerShell -erroraction SilentlyContinue
[void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint")
[void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint.Publishing")

function ListWebParts($web) {
if ([Microsoft.SharePoint.Publishing.PublishingWeb]::IsPublishingWeb($web))
{
$webPublish = [Microsoft.SharePoint.Publishing.PublishingWeb]::GetPublishingWeb($web)
$pages = $webPublish.GetPublishingPages()

foreach($page in $pages)
{
$manager = $web.GetLimitedWebPartManager($page.Url, [System.Web.UI.WebControls.WebParts.PersonalizationScope]::Shared)
$webCollection = $manager.WebParts
if($webCollection.Count -ne 0)
{
for($i =0;$i -lt $webCollection.Count; $i++)
{
$sw.writeline($web.url + "/" + $page.url + ";" + $webCollection[$i].GetType().Name+ ";" +    $webCollection[$i].Title )
}
}
}
}
}

function LoadSPSite()
{
$siteURL = "http://yourSiteUrl"
$site = New-Object Microsoft.SharePoint.SPSite($siteURL)

foreach($web in $site.allwebs)
{
write-output $web.Title
ListWebParts($web)
}
$site.Dispose()
}

$sw = New-Object System.IO.StreamWriter("c:\temp\ListOfWP.csv")
$sw.writeline("Page URL;Web Part Type;Web Part Title")
LoadSPSite
$sw.close()
Nos autres articles
Commentaires
Laisser un commentaire

Restez au courant des dernières actualités !
Le meilleur de l’actualité sur le Cloud, le DevOps, l’IT directement dans votre boîte mail.