[SharePoint] Récupérer les informations d’ une collection de site, vider les corbeilles et créer un modèle de site avec PowerShell

J’ avais déjà bloggé un précédent post sur l’ utilisation basique de Powershell. Powershell permet également de d’ accéder à toutes les classes de .Net . C’ est une solution permettant la manipulation des objets de .Net. Il suffit simplement de charger l’assembly nécessaire pour pouvoir accéder aux méthodes et aux propriétés offertes par la classe.

Dans ce post, je vais créer une petite application en PowerShell qui me permettra de manipuler les objets de SharePoint.

  • Récupérer les informations sur une collection de site
  • Récupérer les tailles des corbeilles et le nombres d’ éléments supprimés
  • Ajouter la possibilité de créer un ‘Modèle de site’
  • Vider les corbeilles Utilisateurs et Administrateurs dans une collection de site
  • Appliquer un thème à un site dans une collection de site

1er Étape: Les outils pour l’ écriture de notre script.

Pour créer des scripts powershell, vous pouvez utiliser, certes le bloc-notes, mais pour debugger c’ est un peu la misère… Ou passer sur des outils plus sympathique qui vous permettront de pouvoir, pourquoi pas récupérer l’IntelliSense sur les objets que vous voulez manipuler.

Personnellement, j’ utilise POWERGUI que je trouve facile d’ utilisation, il est simple, efficace et en plus ce qui ne gâche rien, il est gratuit. Vous pourrez trouver ce petit bijoux sur le lien ci-dessous.

pgui

Il est également possible d’ utiliser Visual Studio pour créer des scripts PowerShell, il vous suffira d’ installer le modèle de projet pour VS2005, sur le site Channel9.msdn.com

2eme Étape: Création de la base de notre script

J’ai porté mon choix sur la construction d’ un script PowerShell qui me créera un ‘Windows Forms’, quitte à coder un peu, autant que cela ressemble à quelque chose…

  • Chargement des Assembly nécessaire

Pour accéder aux classes SharePoint, il faut charger l’ Assembly correspondante (Attention  ‘LoadWithPartialName()’ est obsolète, elle est remplacé par Load(), détails ICI sur le site MSDN, mais la première est plus simple à utiliser que la seconde).

Par défaut powershell charge les Assemblys nécessaire à ses besoins.

assemblypowershell

Je veux créer un ‘Windows Forms’, je vais créer une fonction pour charger le Windows Forms et charger également les Assemblys correspondantes à mes besoins.

Function Load_Form
{
#region Chargement des Assembly
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint")


[System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")


#endregion
}
Load_Form
  • Mise en place des contrôles

Ensuite il faut définir les contrôles que nous voulons placer dans le Windows Forms. A la suite de #Endregion dans la fonction… Je voudrais que cela ressemble à ceci:

SharePoint-Informations sur la collection de site

SharePoint-Informations sur la collection de site 1

SharePoint-Informations sur la collection de site 2

Retrouver une démo sur YouTube

Les contrôles étant nombreux, je vous laisserais à la fin du post en pièce jointe la source complète.

Plaçons les contrôles dont nous aurons besoin, les contrôles dans la fenêtre Windows et pour terminer, toujours dans la fonction, à la suite plaçons les actions des boutons.

occupons-nous plutôt des actions vers SharePoint.

  • La connexion au serveur (Initié par mon bouton ‘Connexion’ dans mon Windows Form

#Gestion des erreurs de connexion au serveur
trap [Exception] {
$BoxResultat.text = "Erreur: $($_.Exception.Message) :::: `n`n Impossible de se connecter au serveur. Vérifiez votre saisie!"
continue
   }
#Definition de l’URL du serveur (Nom+Port)
#***************************************
$userURL = $TextBox1.text
$userport = $textbox2.text
$userFullURL = $userURL+":"+$userport

#Connexion au site en utilisant SPSite
#***************************************

$monsite=new-object Microsoft.SharePoint.SPSite($userFullURL)

$AllSites = $monsite.AllWebs

#Boucle pour lister les sites sous l’URL Serveur
foreach ($UnSite in $AllSites)
{

#Ajout des sites dans la listBox de mon formulaire
$SiteList.Items.Add($UnSite)
}

  • Récupération des informations du site en fonction de la sélection dans la liste des sites.


#Vide la liste des informations sur le site sélectionné précédent
$BoxResultat.text=""

#Remplir le label avec le nom du site dans la selection
$Infos.Text = ‘Connexion au site: ‘+$SiteList.SelectedItem

#Connexion au site de la selection
$maselectiondesite=new-object Microsoft.SharePoint.SPSite($SiteList.SelectedItem.url)

#Ouverture du site
$myweb = $maselectiondesite.openweb()

#Affiche les infos de la sélection
$Infos.Text = "Informations sur le site – Titre: " + $SiteList.SelectedItem +" URL: " + $SiteList.SelectedItem.url

#Récupération des Informations sur le site
$BoxResultat.text += "Titre du site: " + $myweb.Title #Le titre du Site

#******* Détermine si le site est site racine ****************

if ($myweb.IsRootWeb -eq "True")
{
#Fixe l’url du site à / pour la racine Web
$BoxResultat.text += "`r`nURL du site: /"
}
else
{
#Recuperation du nom
$BoxResultat.text += "`r`nURL du site: "+ $myweb.Name
}

#Date de création de la collection de site

$BoxResultat.text += "Date de création: " + $myweb.Created

#Récupère les quotas
$BoxResultat.text += "`r`nQuota – Stockage Maxi: " + ($maselectiondesite.Quota.StorageMaximumLevel/1048576) +" Mo"

$BoxResultat.text += "`r`nQuota – Avertissement du stockage: " + ($maselectiondesite.Quota.StorageWarningLevel/1048576) + " Mo"

#Récupère le stockage utilisé par la collection de site
$BoxResultat.text += $retour
$BoxResultat.text += "`r`nStockage utilisée pour la collection de site: " + ($maselectiondesite.Usage.Storage/1000000)+" Mo"

#Récupère le nombre d’items dans les corbeilles
$CorbeilleInfo = $maselectiondesite.RecycleBin.Count
$CorbeilleSite = $myweb.RecycleBin.Count
$BoxResultat.text += "`r`nTotal des éléments dans les corbeilles de la collection: " + $CorbeilleInfo
$BoxResultat.text += "`r`nTotal des éléments dans la corbeille utilisateur pour ce site: " + $CorbeilleSite

#Méthode d’authentification
$BoxResultat.text += "`r`nMethode d’authentification: " + $myweb.AuthenticationMode

#Date de dernière modification de la sécurité dans la collection de site
$MaDate = $maselectiondesite.LastSecurityModifiedDate.Date
$BoxResultat.text += "`r`nDate de modification de la sécurité dans la collection de site: " + $MaDate.Day+"/"+$MaDate.Month+"/"+$MaDate.Year

#URL de la Master Page par defaut et de la master page en cours d’utilisation
$BoxResultat.text += "`r`nUrl de la MasterPage par defaut: " + $myweb.MasterUrl
$BoxResultat.text += "`r`nUrl de la MasterPage en cours: " +$myweb.CustomMasterUrl

#La description du site Web
$BoxResultat.text += "`r`nDescription: " + $myweb.Description
#La localisation et la langue utilisée
$BoxResultat.text += "`r`nLocalisation: " + $myweb.Locale
$BoxResultat.text += " — " + "Language: " + $myweb.Language

#Autorisation pour apparaitre dans les résultats de recherche

$BoxResultat.text += "`r`nAutorisez dans les résultats de recherche: " + $myweb.NoCrawl

#Récupération du thème du site
#Determine le nom du thème en cours

if ($myweb.Theme -eq "")
{
#*****************************************************
#Affiche ‘Theme par defaut’ si le nom du theme est vierge
$BoxResultat.text += "`r`nTheme utilise: Theme par defaut"
$BoxResultat.text += $retour
}
else
{
#*****************************************************
#Affiche le nom du theme en cours d’utilisation si autre que celui par defaut
$BoxResultat.text += "`r`nTheme utilise: " + $myweb.Theme
$BoxResultat.text += $retour
}

#Flux Rss
if ($myweb.AllowRssFeeds -eq "True")
{
$BoxResultat.text += "`r`nAutorise les Flux RSS: Oui"
}
else
{
$BoxResultat.text += "`r`nAutorise les Flux RSS: Non"
}

#liste des listes
$BoxResultat.text += $separation
$BoxResultat.text += "`r`nListe du site: "
foreach ($li in $myweb.Lists)
{
$BoxResultat.text += "`r`n – " + $li
}
 

#Liste des Admins
$ListAdmin = $myweb.SiteAdministrators
$BoxResultat.text += $separation
$BoxResultat.text += "`r`nListe des Administrateurs"
foreach ($lua in $ListAdmin)
{
$BoxResultat.text += "`r`n- " + $lua
}
 

#Liste des Users
$BoxResultat.text += $separation
$BoxResultat.text += "`r`nListe des utilisateurs:"
foreach ($au in $myweb.AllUsers)
{
$BoxResultat.text += "`r`n – " + $au
}

#Liste des groupes
$BoxResultat.text += $separation
$BoxResultat.text += "`r`nListe des groupes: "
foreach ($lg in $myweb.AssociatedGroups)
{
$BoxResultat.text += "`r`n – " + $lg
}

  • Création d’un modèle de site basé sur le site sélectionné

#gestion des Erreurs
trap [Exception] {
$BoxResultat.text = "Erreur de création du modèle: $($_.Exception.Message)`r`n Impossible de créer un modèle….!"
continue
   }
$NomTemp = $TemplateNom.text
$Desctemplate = $TemplateDescription.text
$TitleTemp = $TemplateTitre.text
$Content = $templateContent.CheckState

#Détermine si le contenu doit-être inclus dans le modèle
if ($Content -eq "Checked")
{
$ContentState = "True"
}
else
{
$ContentState = "False"
}
#endregion

$myweb.SaveAsTemplate($NomTemp,$titleTemp,$Desctemplate,$ContentState)
}

  • Vider toutes les corbeilles de la collection de site

$sbox = "Voulez-vous supprimer le contenu de la corbeille"
$dbox = [Windows.Forms.MessageBox]::Show($sbox, "Suppression", [Windows.Forms.MessageBoxButtons]::YesNo, [Windows.Forms.MessageBoxIcon]::Question)
if ($dbox -eq [Windows.Forms.DialogResult]::Yes)
{
$mysite.RecycleBin.DeleteAll()
}

  • Vider la corbeille utilisateur du site sélectionné

$sboxu = "Voulez-vous supprimer le contenu de la corbeille utilisateur définitivement"
$dboxu = [Windows.Forms.MessageBox]::Show($sboxu, "Suppression", [Windows.Forms.MessageBoxButtons]::YesNo, [Windows.Forms.MessageBoxIcon]::Question)
if ($dboxu -eq [Windows.Forms.DialogResult]::Yes)
{
$SitecollectionRecycleBin = $myweb.RecycleBin
for ($x = $SitecollectionRecycleBin.Count ; $x -gt 0 ; $x–)
{
  $Item = $SitecollectionRecycleBin.Item($x-1)
  $SitecollectionRecycleBin.Delete($Item.ID)
}}

Voila, vous devez avoir une application Windows Forms avec les fonctionnalité voulues. Il ne vous reste plus qu’à créer le code pour le changement du thème du site (Voir les sites ci-dessous) et le tour est joué…

Vous trouverez beaucoup d’informations sur Powershell sur les sites suivants:

Le site de Fabrice Romelard:

http://blogs.developpeur.org/fabrice69/default.aspx

Le site CodePlex:

http://www.codeplex.com/SharePointPSScripts

Le site Microsoft: http://www.microsoft.com/windowsserver2003/technologies/management/powershell/default.mspx

Le site Microsoft Script Center: http://www.microsoft.com/technet/scriptcenter/hubs/msh.mspx

Le site MSDN pour les classes SharePoint:

http://msdn.microsoft.com/en-us/library/ms978559.aspx

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s