PowerShell: Simplifier la création de fonction avec les bons arguments

Depuis l’arrivée de SharePoint 2010, l’utilisation de PowerShell est devenue presque incontournable. Pour industrialiser certaines procédures, il n’est pas rare de créer des fonctions utilitaires, pour modulariser ses scripts et parfois même étendre la console PowerShell avec des modules personnalisés.

L’article d’aujourd’hui a pour objectif de vous montrer comment créer des fonctions plus simples à utiliser, en jouant avec le typage des paramètres. Continue reading

Rating 5.00 out of 5
[?]

Ouvrir des packages WSP directement depuis l’explorateur Windows

Voici une petite astuce bien pratique, qui permet d’ouvrir les fichiers WSP depuis l’explorateur Windows.

Pour rappel, les fichiers WSP sont des fichiers « .cab ». Il suffit alors de « brancher » le handler Windows natif d’ouverture des fichiers cabs également pour les fichiers WSP.

Pour se faire, le plus simple est de créer un fichier “handlewsp.reg” dont le contenu est :

 

Puis importer ce fichier en l’ouvrant.

Et voilà !

Rating 5.00 out of 5
[?]

Feature pour définir la page d’accueil d’un site

Pour définir la page d’accueil d’un site, il faut normalement définir la propriété PublishingWeb.DefaultPage.

Si l’on souhaite, depuis une feature, définir la page d’accueil du site, le premier réflexe sera de définir cette propriété depuis un FeatureReceiver.

Il existe toutefois une méthode plus simple, sans code. En effet, la page d’accueil est stockée dans le PropertyBag du dossier racine du site.

Un petit script PowerShell peut rapidement le montrer :

Comme alors définir cette propriété depuis une feature ? Tout simplement en alimentant le PropertyBag du dossier racine, avec un fichier element.xml pouvant ressembler à celui-ci :

Attention à bien définir l’attribut Url, même s’il est vide. Sans celui-ci une exception sera levée.

Rating 5.00 out of 5
[?]

PowerShell: valider des credentials

Couramment, avec PowerShell, on a besoin de travailler avec des login/password.

Microsoft propose la commande standard Get-Credential, mais cette dernière ne consistera qu’à afficher un popup d’authentification. Dans ce dernier, il est possible de saisir n’importe quoi, aucune validation ne sera faite. Avec du recul, on se rend compte que c’est logique. Un credential peut être saisi quel que soit le mécanisme d’authentification et la commande n’a pas pour vocation de les valider (ou ne peut techniquement pas).

Toutefois, dans monde très coloré Microsoft (pour un blog SharePoint c’est normal ;)), on va la plupart du temps travailler avec des comptes Active Directory. Dans ce cas, ne vaudrait-il pas mieux permettre de valider dans la foulée ces Credentials ?

Pour vous aider, voici un script PowerShell qui permet de valider un objet de type PSCredential : Continue reading

Rating 5.00 out of 5
[?]

SPSecurity.RunWithElevatedPrivileges depuis PowerShell

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 : Continue reading

Rating 5.00 out of 5
[?]

Exploration du Global Assembly Cache facile

Le Global Assembly Cache est un conteneur à assembly .Net global à la machine. Il permet notamment de faire coexister plusieurs versions d’une même assembly sur l’ordinateur. Consultez la page MSDN “Global Assembly Cache” pour plus d’information.

Si vous essayez d’accéder au GAC par l’explorateur Windows (c:\windows\assembly), vous ne verrez pas la structure physique du GAC, mais son contenu. Un composant COM “shfusion.dll” se chargeant en effet de présenter ces dll de manière simple et logique.

Il arrive toutefois d’avoir parfois besoin de parcourir le GAC. Le plus souvent, il s’agit de créér une référence dans Visual Studio d’un DLL du GAC, ce que Visual Studio ne propose pas par défaut.

Deux solutions s’offrent à vous : Continue reading

Rating 5.00 out of 5
[?]

Mise à jour de masse de niveau de permission (SPRoleDefinition)

J’ai été confronté à la demande suivante : sur un ensemble de site (des mysites en l’occurrence), un niveau d’autorisation personnalisé est défini par code lors de la création (Mysite Owner).

Une évolution a nécessité la modification de ce niveau d’autorisation pour ajouter la possibilité de créer des groupes.

La mise à jour du code créant le mysite est triviale, il aura suffi d’ajouter la permission. Mais qu’en est-il des sites déjà créés ?

La solution est assez simple. Le script Powershell suivant remplira ce rôle :

Ce script attend en entrée l’url de l’application Web hébergeant les sites mysites. Il va ensuite énumérer les collections de site de type mysite (template « SPSPERS »).

Il ajoute enfin, si nécessaire, la nouvelle permission.

Rating 5.00 out of 5
[?]

Activation du Developer Dashboard

Description du Developer Dashboard

Le Developer Dashboard est une nouvelle fonctionnalité introduite par Microsoft dans SharePoint 2010. Son objectif est d’aider le développeur à déboguer ses pages, à diagnostiquer l’origine de lenteur, etc.

Le Developer Dashboard propose trois niveaux d’affichage :

  • On : toujours visible
  • Off : toujours masqué
  • OnDemand: s’ouvre/se ferme à la demande

Le Developer Dashboard peut également être restreint aux utilisateurs en appliquant un masque de permission (du type SPBasePermissions). La plupart du temps on mettra FullMask, car c’est très orienté développeur (qui a la plupart du temps tous les droits sur le poste de développement).

Plus de détails sur la page MSDN Using the Developer Dashboard.

Activer le Developer Dashboard

Plusieurs possibilités s’offrent à vous pour activer le Developer Dashboard : Continue reading

Rating 5.00 out of 5
[?]

SharePoint Developer Toolbox: présentation du projet

Après quelque mois de non activité dans ce blog, me revoilà  :) Il faut que mes priorités avait un peu changé (ma belle et mes petits bouts).

Je redémarre cette année 2012 en préparant un petit projet utile aux développeurs : SharePoint Developer Toolbox.

L’objectif de ce projet est double :

  • fournir à la communauté des outils/extensions orienté développement
  • explorer certains concepts à des fins didactiques.

D’ailleurs vous verrez que ce projet est souvent du genre à “donner du lard aux cochons”. Sur un poste de développement, on peut se permettre de bidouiller des fichiers, patcher des web.configs, etc. Je choisis toutefois une approche ultra clean, histoire de savoir comment faire pour des sujets plus rigoureux que des outils de développements.

Le projet est open-source, et hébergé sur github: Hand.SharePoint.DeveloperToolbox.

Je vous invite à forker le projet et ajouter/modifier ce qui vous semble pertinent (vive Github!).

D’autres posts vont suivrent, qui mettront le focus sur les fonctionnalités au fur et à mesure de leur apparition.

Rating 5.00 out of 5
[?]

SharePoint : RunWithElevatedPrivileges, attention à la portée des variables

Lorsque votre code SharePoint doit exécuter des actions pour lesquelles l’utilisateur n’a pas les droits, vous pouvez utiliser la méthode SPSecurity.RunWithElevatedPrivileges. Cette dernière attend un delegate en argument. Le delegate est alors appelé sans restriction d’autorisation, au lieu de brider les appels aux autorisations de l’utilisateur connecté. Bien entendu à utiliser avec précaution, pensez à bien verrouiller la portée de votre code.

Toutefois, l’utilisation de cette méthode peut amener quelques surprise. Par exemple, j’ai sur un de mes site SharePoint un groupe dont l’option “Qui peut consulter l’appartenance au groupe?” est positionnée sur “Membres du groupe”. Ainsi, un utilisateur non administrateur ne peut consulter les membres de ce groupe. Si dans votre code, vous devez découvrir les membres de ce groupe (on peut imaginer un scénario ou on a un groupe de personne responsable d’une étape de workflow, sans que les utilisateurs les connaissent), vous écrirez naturellement le code suivant : Continue reading

Rating 3.50 out of 5
[?]