Apparu en 2006, PowerShell ne cesse de faire parler de lui dans le monde des administrateurs qu’ils soient positionnés sur des technologies de base de données, d’annuaire d’entreprise ou bien même ici de ferme et serveurs SharePoint.

wss_header

Après en avoir discuté assez longuement avec Renaud, j’en suis sorti un peu plus posé et surtout convaincu du réel intérêt de cette possibilité de scripting, il est indéniable que son succès est à la mesure de ce que cette technologie apporte.

Cela va bien au-delà de la simple manipulation car il est tout à fait possible d’automatiser de nombreuses actions via des scripts réalisés en PowerShell. On peut d’ailleurs le voir à travers de projets CodePlex comme celui de Fabrice Romelard disponible à travers ce lien.

powershell_header

Quel est le réel intérêt ?

Comme tout script, la possibilité d’éditer rapidement un élément pour le plier au besoin est réellement l’atout majeur. Ici PowerShell permet d’utiliser des assemblies .Net directement dans le script ce qui nous permets d’utiliser des classes de l’API SharePoint tels que les fameux SPWeb, SPSite et bien d’autres.

Dès lors, l’administrateur SharePoint peut tout à fait éditer ses propres scripts ou modifier des existants pour répondre le plus rapidement au demande de ses utilisateurs.
En fonction des besoins il pourra alors se construire une série de scripts qui ne seront utilisés que très peu souvent (ou au contraire, c’est à dire sans cesse) mais qui lui simplifieront les démarches !
Nul besoin d’utiliser une application Console ou autres technologies clientes.

 

Comment ?

Forcément, maintenant un peu de mise en pratique avec une introduction rapide à SharePoint au sein de PowerShell.

- Télécharger et installer PowerShell

Tout d’abord, il est souvent nécessaire de récupérer PowerShell qui n’est présent en natif que dans Windows Server 2008 (optionnel) et Windows 7. Il est nécessaire de l’installer en le téléchargeant à travers ce lien.

Une fois PowerShell téléchargé et installé, il est nécessaire de le lancer et d’exécuter la commande suivante qui permettra d’exécuter les scripts sans problème de restriction de sécurité :

Set-ExecutionPolicy Unrestricted

ou

Set-ExecutionPolicy RemoteSigned

- Utiliser des outils pour s’aider

Il peut être utile d’utiliser des environnements de scripting qui aideront précieusement en fournissant une intellisense sur les objets et une vérification des syntaxes. 
On peut utiliser avec PowerShell v2 l’environnement Powershell V2 ISE (Integrated Script Environment) ou un de ces outils d’aide à la création de scripts qui est PowerGui, il peut être téléchargé sur le site suivant.

image

- Création du fichier

Prêt à développer quelques basiques ;) de SharePoint au sein de PowerShell, tout d’abord il est nécessaire de créer un fichier dans le dossier de votre choix. Ce fichier aura pour extension “.ps1” ce qui identifiera le type associé à PowerShell.

- Les mains dans le script

La première ligne du script va permettre de référencer l’assembly SharePoint situé dans le GAC. Voici la ligne en question :

[void] [System.Reflection.Assembly]::LoadWithPartialName(”Microsoft.SharePoint”)

Dès lors, les types déclarés dans l’assembly deviennent disponibles dans le script et on peut alors utiliser les objets de types SPSite comme suit pour lister tous les sites webs enfants ainsi que leurs listes respectives (attention, ce script n’inclut pas les best-practices du dispose pattern) :

#Get the elements from here
$siteUrl = "http://nicolas-ibm-pc/"
$site = new-object Microsoft.SharePoint.SPSite($siteurl)
$site.AllWebs | foreach { $_.Lists | fl $_.Url, Title, Id}

Ici le résultat en exécution : 
image

Ou ici formater en table (ft ou Format-Table à la place de fl dans le script)

image

Pour exécuter, il suffit d’ouvrir l’invite de commande PowerShell (attention à l’UAC dans certains cas).
Ensuite à l’aide des commandes habituelles “cd” (change directory), on se positionne sur le dossier contenant nos scripts et on exécute en tapant la commande suivante :

./GetAllChildWebsAndLists.ps1

Cette action d’exécution peut par la suite être batchée de façon à éviter de parcourir sans cesse en changeant de directory pour chacune des invites de commandes ouvertes.

- Debug

Au sein de PowerGui, il est tout à fait possible d’utiliser l’outil pour déboguer vos scripts et visualiser la valeur des variables et bien d’autres options utiles.
Attention toutefois à ne pas se laisser aveugler par l’outil et oublier les sorties de votre scripts sous prétexte que les variables utiles sont affichés dans la liste de l’outil !

PowerGUI_Debug

 

Quelles limitations ?

Alors quelques limitations peuvent apparaître notamment en termes de contexte web et de validité de ce dernier. En utilisant par exemple l’objet SPPortalSiteMapProvider, on peut s’apercevoir que l’objet de type SPWeb récupéré à l’aide de la traditionnelle méthode SPSite.OpenWeb(), peut laisser apparaitre une erreur visible qu’à l’exécution sans raison apparente, ou tout du moins rapidement débugable.

Aussi rassurons nous, ces limitations sont toutefois très faibles et très peu fréquentes. Il faut seulement en être conscient pour ne pas s’arracher les cheveux sur des soucis qui viennent d’ailleurs que notre “bout de code”.

 

Pour aller plus loin !

Vous pouvez vous rendre sur le blog de Karine Bosch pour découvrir davantage de SharePoint utilisé au sein de PowerShell à travers ces liens.

D’autres sites couvrent également le sujet PowerShell :

 

Conclusion

PowerShell permet de très rapidement réaliser des opérations qu’il est inutile de retrouver dans une application cliente ou web.

Ici on retrouvera principalement des opérations d’administration ou de visualisation rapide de contenu ou propriété et c’est précisément dans cette optique qu’il est très recommandé de le mettre en pratique.

Il peut être aussi un bon moyen pour utiliser et tester, voir déboguer vos applications développées, tout du moins la couche métier que vous avez extrait à travers une assembly dédiée, vous pouvez référencer l’assembly en question et utiliser ensuite toutes les cmdlets de PowerShell pour formater le résultat de vos méthodes.

En clair, PowerShell peut servir à de multiples cas d’usages et il est indéniable qu’il présente un réel intérêt, il serait dommage de se priver de ce genre de possibilité. D’autant plus que la v2 déjà disponible en CTP, intégrée à Windows 7 et Server 2008 R2, annonce encore plus de nouveautés !