Créer dans Outlook des listes de distributi​on en fonction des catégories

Un collègue de travail m’a proposé une macro qu’il a écrit en VBA.

Dans Outlook, vous pouvez créer librement des catégories afin d’organiser ou classer vos contacts. Le souci rencontré est que rien n’est prévu dans Outlook pour exploiter cette information. Au contraire de logiciels comme Androïd qui vous permettent de sélectionner tous les contacts d’un groupe pour leur envoyer un email ou un sms.

La VBA développé par Jean-François permet justement de convertir automatiquement les catégories des contacts Outlook en listes des diffusion, pour tous les carnets d’adresses.

Comme j’ai trouvé son p’tit programme ingénieux, il a accepté de le partager avec vous sur mon blog.

CreerGroupesAvecCategories_V1_0_0.zip

PowerShell: Commandes pour manipuler les formats de fichiers

Les formats de fichiers produits par les commandes PowerShell sont parfois déroutants.

Pourtant les exemples trouvés sur le web sont souvent simplistes car ils ne reflètent pas toujours la complexité de la réalité.

En effet, les « vrais » fichiers recèlent des pièges liés aux données elles-mêmes: présence de virgule ou de point-virgule dans les données au format CSV, etc.

Cet article est l’occasion de passer en revue les principales particularités des formats de fichier et les commandes associées.

Out-File

Pour obtenir la liste des services qui s’exécutent sur votre ordinateur dans un fichier texte, vous allez utiliser la commande Out-File.

Ouvrez une invite de commande PowerShell en tant qu’Administrateur et tapez:

Get-WmiObject win32_service | Out-File .services.txt

Ouvrez le fichier services.txt avec Notepad++:

ExitCode : 0
Name : AdobeARMservice
ProcessId : 1780
StartMode : Auto
State : Running
Status : OK

ExitCode : 0
Name : AdobeFlashPlayerUpdateSvc
ProcessId : 0
StartMode : Manual
State : Stopped
Status : OK

Dans ce cas, vous ne récupérez qu’une partie des informations d’un service, la disposition est sous forme de fiche et le fichier est encodé en UCS-2 Little Endian.

Encodage UTF-8

Pour avoir un encodage UTF-8, tapez:

Get-WmiObject win32_service | Out-File .services.txt -Encoding « UTF8 »

Par défaut, Get-WmiObject win32_service produit un résultat sous forme de liste. Pour avoir une disposition tabulaire, vous essayez:

Get-WmiObject win32_service | Format-Table | Out-File .services.txt -Encoding « UTF8 »

Le résultat:

ExitCode Name ProcessId StartMode State Status
——– —- ——— ——— —– ——
0 AdobeARMservice 1780 Auto Running OK
0 AdobeFlashPlayer… 0 Manual Stopped OK

Le « Name » est partiel. La mise en forme est peu pratique pour un traitement automatisé.

Commande Get-Service

Le résultat ne vous convenant toujours pas, vous changez de commande pour obtenir la liste des services. Au lieu d’utiliser Get-WmiObject win32_service, vous essayez la commande Get-Service qui par défaut produit un résultat sous forme de tableau:

Get-Service | Out-File .services.txt -Encoding « UTF8 »

Le résultat est encore différent:

Status Name DisplayName
—— —- ———–
Running AdobeARMservice Adobe Acrobat Update Service
Stopped AdobeFlashPlaye… Adobe Flash Player Update Service

En fait, la colonne Name (ainsi que DisplayName) est tronquée.

Export-Csv

Au lieu d’utiliser Out-File, vous allez utiliser Export-Csv. Tapez la commande suivante:

Get-WmiObject win32_service | Export-Csv .services.csv -Encoding « UTF8 »

Ouvrez le fichier services.csv avec Notepad++ et vous voyez apparaître beaucoup plus d’informations sous forme quasi-tabulaire:

#TYPE System.Management.ManagementObject#rootcimv2Win32_Service
« PSComputerName », »__GENUS », »__CLASS », »__SUPERCLASS », »__DYNASTY », »__RELPATH »,…
« MONORDINA », »2″, »Win32_Service », »Win32_BaseService », »CIM_ManagedSystemElement », »Win32_Service.Name= » »AdobeARMservice » » »,…
« MONORDINA », »2″, »Win32_Service », »Win32_BaseService », »CIM_ManagedSystemElement », »Win32_Service.Name= » »AdobeFlashPlayerUpdateSvc » » »,…

Pour éliminer la première ligne (« #TYPE System.Management.ManagementObject#rootcimv2Win32_Service »), il suffit de rajouter le paramètre -NoTypeInformation à la ligne de commande:

Get-WmiObject win32_service | Export-Csv .services.csv -Encoding « UTF8 » -NoTypeInformation

Ouvrez le fichier services.csv avec Microsoft Office Excel. Lors de son ouverture, Excel a détecté la présence du séparateur « ; » dans certaines lignes et il a séparé les données concernées dans la seconde colonne (« B »). Par exemple la description du « Service de cache de police Windows » contient un « ; »: « […] Il peut être désactivé ; il en résulte cependant une dégradation des performances des applications. »

Délimiteur spécifique

La présence inopportune du séparateur « ; » va rendre plus complexe le traitement des données lors de l’utilisation d’un Split(). Aussi, pour contourner ce problème, vous décidez de changer de délimiteur en choisissant un caractère plus rare comme ¤.

La commande devient:

Get-WmiObject win32_service | Export-Csv .services.csv -Delimiter « ¤ » -Encoding « UTF8 » -NoTypeInformation

Lorsque vous ouvrez le fichier services.csv avec Microsoft Office Excel, celui-ci n’arrive pas à séparer les colonnes automatiquement: l’assistant d’importation de texte se lance.

Assistant d'importation de texte d'Excel

Vous pouvez réduire le nombre de colonnes avec l’utilisation de la commande Select-Object. Par exemple, si vous ne voulez que le nom et la description (« Caption ») de chaque service, vous tapez la commande suivante:

Get-WmiObject win32_service | Select-Object Name, Caption | Export-Csv .services.csv -Delimiter « ¤ » -Encoding « UTF8 » -NoTypeInformation

Le fichier résultat est plus sobre:

« Name »¤ »Caption »
« AdobeARMservice »¤ »Adobe Acrobat Update Service »
« AdobeFlashPlayerUpdateSvc »¤ »Adobe Flash Player Update Service »

Import-Csv

Pour retraiter le fichier résultat, utilisez la commande PowerShell Import-CSV suivante:

Import-Csv .services.csv -Delimiter « ¤ »

Commande PowerShell Import-Csv

Pour traiter une seule colonne, vous utilisez la fonction Split() ou la variable automatique $_.

La commande suivante fournit la description de tous les services dont le nom débute avec la lettre « A »:

Import-Csv .services.csv -Delimiter « ¤ » | ForEach-Object {if($_.Name.StartsWith(« A »)){write-host $_.Caption}}

Si votre fichier services.csv ne possédait pas d’entête, la commande précédente échouerait. Pour y remédier, il suffit d’indiquer un entête dans la commande Import-Csv avec le paramètre Header:

Import-Csv .services.csv -Header (« Name », »Caption ») -Delimiter « ¤ » | ForEach-Object {if($_.Name.StartsWith(« A »)){write-host $_.Caption}}

Le résultat donne quelque chose comme:
Adobe Acrobat Update Service
Adobe Flash Player Update Service

Supprimer les double guillemets

Lorsque vous utilisez Export-CSV, cette commande ajoute automatiquement des guillemets autour de chaque donnée retournée. Pour enlever tous les guillemets des fichiers CSV à l’aide de PowerShell, l’article de Hey, Scripting Guy! donne une solution qui combine l’utilisation des commandes Export-Csv et Out-File. Toutefois, cette solution n’est pas pleinement satisfaisant car elle remplace aussi les guillemets qui seraient à l’intérieur d’une donnée !

(Get-Content .services.csv) -replace ‘ »‘, «  » | Out-File .services.csv -Encoding « UTF8 » -Force

Faites attention à l’affichage ambigüe des guillemets et des quotes dans WordPress. L’opérateur -replace a comme premier argument ‘ »‘, soit: une quote, un guillemet, une quote.
Le second argument est «  », soit: un guillemet, un guillemet.

La paramètre -Force permet d’écraser un fichier en lecture seule.

Une solution moins radicale consiste à utiliser une expression régulière avec la fonction replace pour supprimer uniquement les guillemets en début et en fin de chaîne de chaque donnée: ‘^ »(.*) »$’, ‘$1’. Le replacement doit se faire sur chaque donnée, et non pas ligne par ligne.

Tableaux / Arrays

Face à la diversité des choix, vous pouvez être tenté de manipuler toutes les données à l’aide de tableaux (« Arrays ») plutôt que de les stocker temporairement dans un fichier.

Si le volume de données manipulées n’est pas disproportionné, ce choix est souvent judicieux car la manipulation en mémoire reste souvent plus rapide que l’écriture sur un disque dur.

Toutefois, pour des raisons de conservations d’historique ou de traçabilité, vous devrez peut-être enregistrer les données manipulées dans un fichier.

Dans ce cas, n’utilisez pas l’opérateur -replace sur les objets. En effet, les commandes suivantes risquent de produire un résultat différent de vos attentes:

# Génére un fichier CSV à partir de la liste des services de l’ordinateur
Get-WmiObject win32_service | Select-Object Name, Caption | Export-Csv .services.csv -Delimiter « ¤ » -Encoding « UTF8 » -NoTypeInformation

# Alimente le tableau $Array à partir du fichier CSV
$Array = Import-Csv .services.csv -Delimiter « ¤ »

# Cherche à remplacer des caractères dans $Array puis génère un fichier TXT pour récupérer le résultat
$Array -replace « Adobe », »ADOBE » | Out-File .services-2.txt

# Cherche à remplacer des caractères dans $Array puis génère un second fichier CSV pour récupérer le résultat
$Array -replace « Adobe », »ADOBE » | Export-Csv .services-2.csv -Delimiter « ¤ » -NoTypeInformation

Le contenu de services-2.txt:

@{Name=ADOBEARMservice; Caption=ADOBE Acrobat Update Service}
@{Name=ADOBEFlashPlayerUpdateSvc; Caption=ADOBE Flash Player Update Service}

Le contenu de services-2.csv:

« Length »
« 61 »
« 76 »

L’opérateur -replace a converti l’objet tableau $Array en une seule chaine de caractères (string).

le fichier résultat services-2.txt contient les chaînes de caractères.

Le fichier résultat services-2.csv contient la longueur des chaînes de caractères. La chaîne « @{Name=ADOBEARMservice; Caption=ADOBE Acrobat Update Service} » fait exactement 61 caractères et la chaîne « @{Name=ADOBEFlashPlayerUpdateSvc; Caption=ADOBE Flash Player Update Service} » fait exactement 76 caractères.

Diviser un fichier vCard en de multiples fichiers séparés avec Powershell

Les contacts de Gmail peuvent être exportés dans un fichier au format vCard pour une importation dans le carnet d’adresses Apple ou une autre application comme Outlook.

Le fichier produit s’intitule contacts.vcf. Il contient toutes vos adresses dans un seul fichier. Les adresses étant au format vCard, elles sont stockées dans le fichier sous la forme:
BEGIN:VCARD
VERSION:3.0
FN:Jean Dujardin
N:Dujardin;Jean;;;
EMAIL;TYPE=INTERNET:jean.dujardin@gmail.com
NOTE:Intelligence économique
END:VCARD

Chaque adresse est donc encadrée dans un bloc BEGIN:VCARD – END:VCARD.

Lorsque j’ai voulu importer ce fichier dans Microsoft Outlook 2013, celui-ci n’a lu que la première adresse. Pour contourner cette difficulté, j’ai trouvé sur le web un script en Windows PowerShell qui permet de lire un gros fichier pour générer des petits fichiers unitaires.

Le script de Paul Westlake a justement été écrit pour diviser un fichier vCard en de multiples fichiers séparés. Comme il correspondait parfaitement à mon besoin, je l’ai uniquement francisé.

Le script n’étant pas signé, pensez à modifier la préférence utilisateur de la stratégie d’exécution Windows PowerShell avec la commande Set-ExecutionPolicy.

Code actuel:
SplitVCF_V2_0_0.zip

Ancien code:
SplitVCF_V1_0_0.zip

Parcours récursif d’une arborescence de fichiers en batch

Afin de sauvegarder tous les fichiers du disque dur dans une archive compressée et cryptée, j’ai développé un programme en batch qui utilise la ligne de commande de WINRAR. Il fonctionne très bien, toutefois j’ai rencontré deux soucis.

Le premier problème, c’est la taille des données qui augmente sans cesse. Faire une unique sauvegarde de la totalité des données n’est pas pratique lors des restaurations. Les sauvegardes sont donc faites par sous-répertoires afin d’obtenir des archives de taille plus petite.

L’autre problème survient lorsque les répertoires sont renommés. Il n’était pas possible de modifier le script à chaque fois qu’un des répertoires était renommé. Aussi le script procède à un parcours récursif des répertoires afin de découvrir automatiquement le nom des dossiers.

Le parcours récursif est actuellement sur deux niveaux, mais il est possible d’ajouter des niveaux supplémentaires sans difficulté.

Prenons un exemple. Les données à sauvegarder sont stockées dans une arborescence de quelques dossiers sur un lecteur Q:

Les dossiers du niveau 1 sont, par exemple:

  • A_faire,
  • En_attente,
  • Archives,
  • Important,
  • Personnel,
  • Travail,
  • Volumineux.

La taille de ces dossiers de niveau 1 étant trop importante, la sauvegarde est faite au niveau des sous-dossiers. Les sous-dossiers, comme les dossiers, n’ont pas d’espace dans leur nom: présence d’un tiret (« -« ) ou d’un underscore (« _ ») à la place de l’espace.

Aussi, chaque sous-dossier est sauvegardé individuellement dans une archive compressée et cryptée. Le nom du fichier compressé est composé de la façon suivante: dossier.sous-dossier.rar. Les sauvegardes sont stockées sur un disque externe.

Le principe de fonctionnement est le suivant :

  • La liste des dossiers de Q: est stockée dans le fichier backup1.lst, grâce à la commande dir Q: /b > backup1.lst.
  • Le résultat stocké dans backup1.lst est exploité grâce à la commande FOR /f « delims=: tokens=1 » %%a in (‘TYPE backup1.lst’) do (…).

Puis pour chaque nom présent dans backup1.lst, la même technique est utilisée pour produire un fichier backup2.lst qui contient la liste des sous-dossiers:

  • dir Q:%%a /b > backup2.lst
  • FOR /f « delims=: tokens=1 » %%b in (‘TYPE backup2.lst‘) do call svg-0.01b.cmd %%a %%b

Le programme svg-0.01b.cmd se charge de la compression.

Une remarque sur le mot de passe. Celui-ci est en clair dans svg-0.01b.cmd: ce qui peut sembler imprudent. Il serait possible de le saisir à chaque fois mais avec 84 archives cryptées, cela deviendrait assez pénible. Il existe aussi des techniques assez simple pour le lire à partir d’un fichier texte qui serait sur un emplacement sécurisé, mais finalement ça ne ferait que déplacer le problème.

En fait, ces fichiers batch sont stockés dans un volume crypté par TrueCrypt.

Ce logiciel gratuit est un des produits qualifiés de l’ANSSI pour protéger le poste de travail. TrueCrypt est une solution logicielle de chiffrement des données. Cela permet de réduire le risque en cas de vol du matériel car les données sont protégées à l’intérieur d’un ou plusieurs volumes TrueCrypt chiffrés.

SVG_V1_0_0.zip

Commandes AppCmd de IIS

Pour administrer IIS (Internet Information Server), il existe les outils suivants : l’interface graphique du Gestionnaire IIS, les scripts WMI (rootWebAdministration), le PowerShell, le code managé de l’API Microsoft.Web.Administration et l’outil en ligne de commande AppCmd.exe.

Afin d’automatiser l’audit de IIS, j’ai développé une série de petits scripts basés sur AppCmd. Ces scripts ont été rédigés après la lecture de l’article Appcmd.exe (IIS 7) de Microsoft.

Certains des scripts peuvent s’utiliser sans personnalisation. Toutefois, de nombreux scripts nécessitent une adaptation des variables pour fonctionner correctement dans votre environnement.

Liste des scripts:

AUTHAnonymous- Désactive l’authentification anonyme
AUTHBase+ Active l’authentification de base
AUTHClaims+ Active l’emprunt d’identité ASP.NET
AUTHClaimsUser IIS doit emprunter l’identité d’un compte précis
AUTHDigest+ Active l’authentification Digest avec un domaine précis
AUTHFBA+ Active l’authentification par formulaire
AUTHWindows+ Active l’authentification Windows
Backup Sauvegarde la configuration IIS
BackupList Liste les sauvegardes existantes
BackupNommée Sauvegarde IIS avec un nom de sauvegarde imposé
BackupRestaure Restaure une sauvegarde nommée précise
BackupSansConfirm Sauvegarde la configuration IIS. Ne sauvegarde pas le contenu
Compression+ Active la compression HTTP du contenu statique
CompressionParams Configure les paramètres de compression de contenu statique
Custerr Ajoute un message d’erreur personnalisé pour l’erreur 401.2
CustomHeaders Ajoute un en-tête de réponse
DirectoryBrowse- Désactive l’exploration de répertoire
DirectoryBrowse+ Active l’exploration de répertoire
DocDefautFiles- Supprime un fichier de la liste de documents par défaut
DocDefautFiles+ Ajoute un fichier à la liste de documents par défaut
FilteringEtendus+ Autorise les caractères étendus
FilteringExtensions- Supprime une règle applicable à une extension précise de nom de fichier
FilteringExtensions+ Ajoute une règle d’autorisation applicable à une extension précise de nom
de fichier
FilteringExtensionsUnlisted- Refuse les extensions de nom de fichier non répertoriées
FilteringExtensionsWebDav- Le filtrage des extensions de nom de fichier n’est pas appliqué aux
demandes WebDAV
FilteringMaxContenu Spécifie une longueur maximale du contenu
FilteringMaxEntete Spécifie la taille maximale des en-têtes comportant une valeur précise
FilteringMaxURL Spécifie une longueur maximale d’une URL entrante
FilteringURL- Pas d’analyse des URL qui contiennent une séquence précise
FilteringVerb+ Autorise un verbe
FilteringVerbUnlisted- Refuse les verbes non répertoriés
FilteringVerbUnlistedWebDav- Le filtrage des verbes n’est pas appliqué aux demandes WebDAV
Help Affiche l’aide d’AppCmd
IPSecAddress- Crée une règle de refus pour une adresse IPv4
IPSecAddress+ Crée une règle d’autorisation pour une adresse IPv4
ISAPI Crée une restriction ISAPI qui active une extension ISAPI
Log- Désactive la journalisation
Log+ Active la journalisation
MaxBandwidth Limitation de la bande passante pour un site Web
MaxConnexions Limitation du nombre de connexions
MaxTimeout Limitation du timeout pour un site web
MIME Ajoute un type MIME
PoolList Identifie tous les pools d’applications en cours d’exécution
PoolRecycle Recycle tous les pools d’applications en cours d’exécution
Redirect- Désactive la redirection
Redirect+ Active la redirection et redirige les utilisateurs vers un autre site web
RedirectPermanent Change le code d’état retourné pour la redirection (code réponse
RedirectStandard Change le code d’état retourné pour la redirection (code réponse
RedirectTemporaire Change le code d’état retourné pour la redirection (code réponse
RequestsList Affiche la liste des demandes en cours d’exécution
SecurityRule- Crée une règle de refus pour les utilisateurs anonymes
SecurityRule+ Crée une règle d’autorisation pour tous les utilisateurs
SecurityRuleComplex Crée une règle d’autorisation pour les rôles Admin et Invité, ainsi que pour les utilisateurs Alice et Bob, puis applique cette règle aux verbes GET et POST
SiteAdd Ajoute un nouveau site Web
SiteAutoStart Affiche les sites arrêtés qui ne doivent pas s’exécuter automatiquement
SiteConfig Stocke la totalité de la configuration d’un site web dans un fichier au format XML
SiteConfigEnregistre Enregistre les informations de configuration d’un site dans un fichier au
format XML
SiteConfigRestaure Restaure les informations de configuration d’un site à partir d’un fichier au format XML
SiteDelete Supprime un site web
SiteList Affiche les caractéristiques d’un site web
SitesDeplacePool Déplace toutes les applications d’un site vers un nouveau pool d’applications
SiteSet Modifie l’ID d’un site
SitesList Liste tous les sites Web
SitesStartAll Démarre tous les sites
SiteStopped Affiche les sites arrêtés
SMTP+ Configure le courrier électronique SMTP pour remettre immédiatement les
courriels
SSLPage Exige SSL 128 bits pour un fichier HTML
SSLSite Exige SSL 128 bits pour le site Web
Trace+ Active la journalisation du suivi des demandes ayant échoué au niveau du
site
WPList Répertorie les processus de travail en cours d’exécution

Le nom de mes scripts respecte, peu ou prou, les règles suivantes:

  • Un script AppCmd est préfixé avec AppCmd-
  • Le mot qui suit désigne la catégorie concernée (AUTH: Authorisation, WP: Worker Process, Site, SSL, Backup, Max, etc.)
  • Il y a éventuellement un complément (MaxTimeout)
  • Le signe + à la fin désigne un ajout ou une activation
  • Le signe – à la fin désigne un retrait ou une désactivation

Ces scripts sont mis dans le domaine public, pas de droit d’auteur.

A utiliser à vos risques et périls.

AppCmd_V1_0_0.zip

Réaliser des scripts Windows sans apprendre un langage

Dans cet article, vous découvrirez comment vous pouvez réaliser des scripts Windows sans apprendre de langage. L’intérêt des scripts Windows est de pouvoir automatiser des tâches répétitives.

En effet, dans un domaine Active Directory, l’installation automatisée d’un logiciel peut se faire avec des GPO (Group Policies Objets ou en français : Stratégies de groupes).

Cependant, tous les sites ne s’appuient pas sur un annuaire Active Directory pour l’identification et l’authentification des ressources. Dans ce cas, l’installation automatisée d’un logiciel peut être scriptée même si le logiciel à installer ne dispose pas d’un fichier MSI.

Le package MSI contient les informations nécessaires à la réalisation de l’installation.

Installation automatisée de logiciels

Même dans les cas les plus complexes, interactions avec l’utilisateur, redémarrage nécessaire de l’ordinateur avec poursuite du script, etc., il est possible d’automatiser complètement l’installation.

Concrètement, nous utilisons l’environnement Microsoft WSH et les langages VBScript ou JScript pour automatiser les installations. Ils présentent l’avantage d’être compris par tous les systèmes Microsoft depuis Windows NT 4.0 jusqu’à Windows Server 2016, y compris les postes clients. Comme, par exemple : Windows XP, Windows Seven ou Windows 10.

Bien évidemment, vous pouvez utiliser Windows Powershell, apparu avec Vista, pour faire des scripts Windows. Cependant, vous devrez apprendre un nouveau langage et de nouveaux concepts.

C’est pourquoi, si vous devez procéder à une installation qui nécessite une forte interaction avec l’interface graphique, privilégiez AutoIt pour sa simplicité.

Par exemple, l’écriture du mot questcequecest.com dans une boîte de dialogue, se traduira par:

WshShell.SendKeys « {q}{u}{e}{s}{t}{c}{e}{q}{u}{e}{c}{e}{s}{t}{.}{c}{o}{m} » . . . en WSH
Send(« questcequecest.com ») . . . en AutoIt

AutoIt et les scripts Windows

Il permet de créer des boîtes de dialogues riches:

Scripts Windows
Scripts Windows

Si vous regardez bien l’image, vous verrez que tout ce qui est nécessaire est présent.

COM/OLE est implémenté: toutes les manipulations d’objets de WSH sont gérées à l’identique dans AutoIt. De plus, AutoIt interagit avec les contrôles Windows, les services Windows, le système de fichiers. Il appelle directement les DLL externes et les API Windows.

AutoIt fonctionne ainsi sur les OS Windows 95, 98, ME, NT4, 2000, XP, 2003, Vista, Seven, 8, 8.1, 2008, 2008 R2, 2012, 2012 R2.

Sur Vista et OS ultérieur, il prend en compte UAC (User Account Control ou en français : Contrôle des comptes utilisateur).

Il est gratuit. Aussi, vous pouvez l’utiliser pour bien d’autres choses que les installations de logiciels.

D’autres utilisations des scripts Windows

Le langage de script d’AutoIt, qui est semblable à WSH/VBSCript, vous permet d’accroître considérablement votre productivité pour les tâches d’administration.

Pour cette raison, vous avez intérêt à généraliser l’utilisation des scripts, y compris pour les langages de scripts classiques comme WSH/VBSCript/JSCript ou PowerShell.

Comprendre les Commandes PowerShell SharePoint

Les commandes PowerShell SharePoint permettent d’exécuter automatiquement les tâches administratives liées à SharePoint. Un bon exemple d’application est celui de pouvoir créer de nouvelles listes sur les sites grâce à des commandes PowerShell SharePoint.

Commandes PowerShell SharePoint

Lors de la création d’une nouvelle liste, vous devez d’abord indiquer à SharePoint le modèle à utiliser. Aussi, pour lister tous les modèles, ouvrez SharePoint Management Shell puis tapez les commandes suivantes :

$Web=Get-SPWeb http://ged.nova.ad/sites/primeur/
$Web.ListTemplates | Select Name, Description

Commandes PowerShell SharePoint - Liste de Modèles
Commandes PowerShell SharePoint – Liste de Modèles

Ainsi, vous obtenez le nom et le début de la description de tous les modèles disponibles dans votre collection de sites.

Créer la liste SharePoint

Ensuite, choisissez le modèle que vous vous voulez et créez la liste avec la méthode Add().

$Template=$Web.ListTemplates[« Liste personnalisée »]
$Web.Lists.Add(« Commandes », »Liste des commandes »,$Template)

En cas de succès, SharePoint renvoie l’identifiant interne unique de la liste sur 32 caractères, le GUID.

Commandes PowerShell SharePoint - Liste personnalisée
Commandes PowerShell SharePoint – Liste personnalisée

Ensuite, une fois la liste créée, il est pratiquement indispensable de rajouter des colonnes.

Ajouter une nouvelle colonne

Donc, vous indiquez à SharePoint la liste sur laquelle vous travaillez. Puis vous indiquez le type de la colonne et son nom, toujours avec la méthode Add().

$List=$web.Lists.TryGetList(« Commandes »)
$varFieldTypeTexte=[Microsoft.SharePoint.SPFieldType]::Text
$List.Fields.Add(« FruitID »,$varFieldTypeTexte,$false)

En réalité, la colonne a bien été ajoutée, mais vous ne la voyez pas !

Commandes PowerShell SharePoint - Ajout colonne
Commandes PowerShell SharePoint – Ajout colonne

Pour la voir, vous allez dans les paramètres de la liste, et sous Colonnes, vous retrouvez bien FruitID .

Commandes PowerShell SharePoint - Nouvelle colonne
Commandes PowerShell SharePoint – Nouvelle colonne

Modifier l’affichage de la liste

L’ajout de colonnes ne modifie (heureusement !) pas par défaut les affichages. En effet, c’est à vous de le faire. Il vous reste donc à modifier l’affichage par défaut

$View=$web.GetViewFromUrl(« http://ged.nova.ad/sites/primeur/Lists/Commandes/AllItems.aspx »)
$Field=$List.Fields[« FruitID »]
$View.ViewFields.Add($Field)
$View.Update()

Commandes PowerShell SharePoint - Affichage modifié
Commandes PowerShell SharePoint – Affichage modifié

Voilà pour les principes.

Vous trouverez ci-dessous un script PowerShell complet à télécharger.

Ce script créé une liste intitulée « Commandes » avec 4 colonnes (« FruitID », « FruitNom », « DateAchat », « Quantite »).

L’affichage par défaut (« AllItems.aspx ») de la liste est modifié pour faire apparaître les 4 colonnes.

SPListeCreer_V1_0_0.zip

Enfin, si vous désirez un accompagnement pour vous aider à concevoir le contenu de vos sites Sharepoint, ou pour installer, configurer, auditer SharePoint, allez sur la page de contact.

Créer des Listes déroulantes en cascade dans SharePoint

Une demande récurrente dans SharePoint est de créer des listes déroulantes en cascade dans SharePoint entre deux listes minimum. Cette technique permet de limiter les valeurs affichées en fonction du choix précédent. Par exemple, la première liste peut contenir la liste des régions françaises. Lors du choix d’une région, la seconde liste ne fait apparaître que les départements de la région sélectionnée.

Il existe de nombreuses possibilités pour obtenir ce résultat. Toutefois, l’utilisateur voulait une méthode simple pour le faire, sans l’apport de produits tiers.

Création des deux listes

Afin de créer des listes déroulantes en cascade, vous devez créer au moins deux listes.

La première liste contiendra la Régions: elle est nommée Régions. Cette liste sera aussi appelée la liste parent.

La seconde liste contiendra la liste des départements: elle est nommée Départements. Cette liste aura une colonne de recherche, nommée Région (nom affiché) qui pointera sur la liste des régions.

La procédure pour créer ses deux listes est détaillée dans l’article intitulée Comment créer une colonne de recherche.

Créer le questionnaire

Le questionnaire est un formulaire qui permet d’interroger l’utilisateur sur la région de la liste parent puis le département de la liste enfant. C’est la méthode la plus simple pour implémenter des listes déroulantes en cascade dans SharePoint, dans ce scénario.

Concrètement, il suffit de créer une simple liste personnalisée, nommée Questionnaire. Cette liste aura 2 colonnes supplémentaires de type Recherche (informations déjà sur ce site). La première colonne s’intitule Region (sans accent, pour le nom interne), la seconde colonne s’intitule Departement (sans accent aussi).

Créer la liste qui relie les listes parent et enfant

Pour créer la liste Questionnaire, cliquez sur Actions du site > Autres options > Liste > Liste personnalisée.

Nommez la liste Questionnaire puis cliquez sur le bouton Créer.

Ajout de la première colonne qui relie la liste « parent »

Pour ajouter la colonne Region (sans accent), cliquez sur le ruban Liste (en haut) et sur le menu Créer une colonne.

Nommez la colonne Region (sans accent) puis sélectionnez le type Recherche (informations déjà sur ce site)

Puis, dans Paramètres de colonne supplémentaires, sous Obtenir des informations à partir de, sélectionnez la liste Régions. Sous Dans cette colonne, sélectionnez la colonne Titre (pas Titre lié à un élément) puis cliquez sur le bouton OK.

Pour des raisons esthétiques, vous allez renommer la colonne Region (sans accent) en Région (avec accent). La raison pour laquelle la saisie directe du nom Région n’a pas été faite directement est expliquée dans l’article consacrée au nom interne.

Allez dans les paramètres de la liste puis cliquez sur la colonne Region.

Modifiez le nom de la colonne en Région puis cliquez sur le bouton OK.

Ajout de la première colonne qui relie la liste « enfant »

Pour ajouter la colonne Departement (sans accent), cliquez sur le ruban Liste (en haut) et sur le menu Créer une colonne.

Nommez la colonne Departement (sans accent) puis sélectionnez le type Recherche (informations déjà sur ce site)

Puis, dans Paramètres de colonne supplémentaires, sous Obtenir des informations à partir de, vérifiez que la liste Départements est bien sélectionnée. Si ce n’est pas le cas, sélectionnez-là. Vérifiez aussi que la colonne Titre est bien sélectionnée (pas Titre lié à un élément). Si ce n’est pas le cas, sélectionnez-là puis cliquez sur le bouton OK.

Pour des raisons esthétiques, vous allez renommer la colonne Departement (sans accent) en Département (avec accent).

Allez dans les paramètres de la liste puis cliquez sur la colonne Departement.

Modifiez le nom de la colonne en Département puis cliquez sur le bouton OK.

Listes déroulantes en cascade
Liste déroulante en cascade relie parent enfant

Si vous cliquez sur le lien Ajouter un nouvel élément, vous n’aurez pas de liaison entre la liste parent et la liste enfant: pas de JavaScript, pas de liste déroulante en cascade !

JavaScript

En effet, pour indiquer à SharePoint de faire des listes déroulantes en cascade entre la liste parent et la liste enfant, il est nécessaire d’introduire quelques lignes de JavaScript.

Pour simplifier le travail, nous utilisons JQuery et SPServices.

Les procédures pour utiliser ses deux bibliothèques sont détaillées dans les articles d’initiation à jQuery et d’initiation à SPServices.

Implémenter la logique métier en JavaScript

Une fois que vous savez que les bibliothèques JQuery et SPServices fonctionnement correctement, vous pouvez implémenter la logique métier qui permet d’avoir des listes déroulantes en cascade.

Créez un fichier ListeDeroulanteEnCascade.js avec Notepad avec le contenu suivant:

<script type= »text/javascript » src= »/Scripts/jQuery.js »></script>
<script type= »text/javascript » src= »/Scripts/jQuery.SPServices.js »></script>
<script type= »text/javascript »>

$(document).ready(function() {
$().SPServices.SPCascadeDropdowns({
relationshipList: « Départements »,
relationshipListParentColumn: « Region »,
relationshipListChildColumn: « Title »,
parentColumn: « Région »,
childColumn: « Département »,
});
});
</script>

relationshipList doit contenir le nom de la liste qui fait le lien avec la liste parent (« Régions »). Dans notre cas, c’est la liste Départements.

Au lieu du nom, vous pouvez mettre aussi le GUID de la liste Départements.

relationshipListParentColumn doit contenir le nom interne de la colonne de la liste enfant (« liste Départements ») qui pointe vers la colonne de la liste parent (« Régions »). Dans notre cas le nom interne de la colonne est Region.

Pour savoir comment récupérer le nom interne, consultez l’article sur le nom interne.

relationshipListChildColumn doit contenir le nom interne de la colonne de la liste enfant (« liste Départements ») qui affiche les valeurs filtrées. Dans notre cas le nom interne de la colonne Département est Title.

parentColumn doit contenir le nom d’affichage de la colonne du formulaire (« Questionnaire ») qui pointe vers la colonne de la liste parent (« Régions »). Dans notre cas le nom d’affichage de la colonne est Région.

childColumn doit contenir le nom d’affichage de la colonne du formulaire (« Questionnaire ») qui pointe vers la colonne de la liste parent (« Départements »). Dans notre cas le nom d’affichage de la colonne est Département.

Normalement, vous n’avez pas à modifier le script (ListeDeroulanteEnCascade.js) sauf si vous avez nommé différemment vos colonnes.

Modifier le formulaire avec SharePoint Designer

Pour obtenir des listes déroulantes en cascade, vous devez modifier le formulaire du questionnaire dans ce scénario.

L’ajout du JavaScript doit être fait dans la liste Questionnaire. Plus précisément, il est nécessaire de modifier les formulaires NewForm.aspx et EditForm.aspx de la liste. Le formulaire NewForm.aspx sert à créer un nouvel élément, tandis qu’EditForm.aspx permet de modifier les éléments existants.

La modification des formulaires de la liste Questionnaire se fait à l’aide de SharePoint Designer.

A partir de votre site, cliquez sur Actions du site puis Modifier dans SharePoint Designer.

Dans SharePoint Designer, cliquez sur Listes et bibliothèques (à gauche).

Listes déroulantes en cascade
Liste déroulante en cascade SharePoint Designer Listes bibliotheques

Cliquez sur la liste Questionnaire pour gérer ses paramètres.

Pour vérifier le bon fonctionnement du script ListeDeroulanteEnCascade.js, vous allez modifier le fichier NewForm.aspx.

Pour cela, faites un clic droit sur le fichier NewForm.aspx puis choisissez Modifier le fichier en mode avancé.

Listes déroulantes en cascade
Modifier le fichier en mode avancé

Puis basculez dans la fenêtre Code, si ce n’est pas déjà fait.

Ensuite, lancez une recherche dans le code source sur la chaîne de caractères « <asp:Content ContentPlaceHolderId= »PlaceHolderMain » runat= »server »> »

Listes déroulantes en cascade
Recherche dans SharePoint Designer

En dessous de la chaîne recherchée, copiez tout le contenu du fichier ListeDeroulanteEnCascade.js.

Listes déroulantes en cascade
Import du JavaScript dans NewForm.aspx

Enregistrez les modifications faites sur NewForm.aspx: une fenêtre apparait qui vous informe que l’enregistrement de vos modifications personnalise la page de telle sorte qu’elle ne se base plus sur la définition de site. Cliquez sur le bouton Oui pour enregistrer vos modifications. Ce message n’apparaîtra plus sur ce fichier.

Listes déroulantes en cascade

En premier lieu, appuyez directement sur la touche F12 pour lancer le navigateur web.

Dans le questionnaire qui s’affiche, saisissez un titre (par exemple Question 1) puis cliquez sur la zone déroulante du Région.

Sélectionnez Corse grâce à un double clic. Toutefois, si la liste déroulante ne se ferme pas, appuyez sur la touche tabulation de votre clavier.

Notamment, dans la zone Département, vous devez voir apparaître:

Listes déroulantes en cascade
Création réussie d’un élément avec la liste déroulante

Sélectionnez Corse-du-Sud puis cliquez sur le bouton Enregistrer: laissez ouvert votre navigateur Internet.

Puis, revenez à SharePoint Designer.

Ensuite, dans SharePoint Designer, refaites exactement les mêmes manipulations que vous venez de faire sur le formulaire EditForm.aspx.

Une fois vos modifications terminées, retournez sur le navigateur Internet puis modifiez l’élément Question 1.

Listes déroulantes en cascade
Modification en cours de l’élément

Dans Région, double-cliquez sur Franche-Comté.

Listes déroulantes en cascade
Modification réussie d’un élément

Dans Département, sélectionnez Doubs puis cliquez sur le bouton Enregistrer.

Ensuite, si tout va bien, fermez SharePoint Designer.

Remarques

  • Par analogie avec cet exemple, il est facile de l’étendre pour mettre en oeuvre des listes déroulantes sur 3 ou 4 niveaux.
  • Des problèmes apparaissent à cause des noms de colonnes tronqués au-delà des 32 caractères. Une cause possible d’un nom interne tronqué est l’utilisation d’accent ou d’espace dans le nom de la colonne à sa création.

 

Petit tutoriel d’initiation à SPservices dans SharePoint

Ce tutoriel se limite à une initiation à SPservices dans SharePoint. SPServices est une bibliothèque qui s’appuie sur JQuery et simplifie l’appel aux services Web de SharePoint.

Pour exécuter avec succès cette initiation à SPservices, vous devez suivre au préalable le tutoriel dédié à JQuery, et qui est expliqué dans l’article Tutoriel d’initiation de base sur JQuery dans SharePoint.

Télécharger la bibliothèque SPservices

Avant de débuter cette initiation à SPservices, téléchargez la dernière version de SPServices.

Stockez le fichier zip sur votre ordinateur, décompressez-le et renommez le fichier jQuery.SPServices-2013.01.js en jQuery.SPServices.js. Dans les environnements complexes, il peut être intéressant d’identifier chaque version de SPservices. Dans notre cas, il est plus simple d’avoir une seule référence dans votre collection de sites SharePoint.

Pour pouvoir utiliser le fichier jQuery.js, il est nécessaire de le téléverser (« uploader ») dans la bibliothèque Scripts, créée dans le tutoriel dédié à JQuery.

Allez dans la bibliothèque Scripts puis cliquez sur le bouton Ajouter un document.

Cliquez ensuite sur Parcourir et « uploader » jQuery.SPServices.js dans la bibliothèque.

Initiation à SPservices
Bibliotheque jQuery et SPServices

Vérifier le bon fonctionnement de SPservices

Avant toute chose, il est important de vérifier que SPservices est valide et fonctionne bien dans votre environnement. Il est supposé que vous avez déjà vérifié que JQuery fonctionne parfaitement bien.

Avec le Bloc-notes (notepad.exe), créez un petit fichier VerifierSPservices.js avec le texte suivant:

<script type= »text/javascript » src= »/Scripts/jquery.js »></script>
<script type= »text/javascript » src= »/Scripts/jquery.SPServices.js »></script>
<script type= »text/javascript »>
$(document).ready(function() {
alert($().SPServices.SPGetCurrentSite());
});
</script>

Seules les lignes nouvelles par rapport à VerifierJQuery.js seront présentées.

La seconde ligne sert à référencer l’appel à SPServices. Vous devez donc modifier votre fichier pour que la première instruction src pointe bien vers l’emplacement du fichier jQuery.js hébergé dans la bibliothèque Scripts.

Le code exécuté est:

alert($().SPServices.SPGetCurrentSite());

Si tout va bien, ce code affiche un message avec l’URL complète de votre site.

Enregistrez vos modifications faites dans le fichier VerifierSPservices.js.

Uploadez aussi votre fichier VerifierSPservices.js dans la bibliothèque Scripts.

Initiation à SPservices

Une fois le fichier VerifierSPservices.js uploadé, faites un clic-droit dessus puis Copier le raccourci. Dans un instant, vous aurez besoin de coller le chemin.

Par ailleurs, pour tester le bon fonctionnement du script, vous allez utiliser la page Test, créée dans le tutoriel jQuery. Si vous n’avez plus de page Test, consultez le tutoriel pour en créer une.

Notamment, ouvrez un nouvel onglet dans votre navigateur puis allez sur la page d’accueil de votre site puis cliquez sur Actions du site puis Afficher tout le contenu du site.

Ensuite, cliquez sur la bibliothèque Pages du site.

Puis, dans le volet de gauche, cliquez sur le lien Test. Si un message jQuery s’affiche, fermez-le.

Et cliquez sur Actions du site puis Modifier la page.

Composant webpart editeur de contenu
Composant webpart editeur de contenu

Avec la souris, survolez le composant Editeur de contenu pour faire apparaître son menu d’édition:

Ensuite, cliquez sur Modifier le composant Webpart: sur la droite de l’écran, les paramètres de l’Editeur de contenu s’affiche. Si un message jQuery s’affiche, fermez-le.

Ensuite, sous Lien du contenu, coller le contenu du presse-papier. Normalement, il contient l’emplacement du fichier VerifierSPservices.js.

Ensuite, cliquez sur le bouton OK.

Puis, vous devez voir une fenêtre qui s’affiche en indiquant l’URL du site.

Enregistrez votre page: le message s’affiche à nouveau.

 

Petit tutoriel d’introduction et d’initiation à JQuery dans SharePoint

Ce tutoriel se limite à une initiation à JQuery dans SharePoint. L’objectif est de comprendre comment utiliser jQuery concrètement dans SharePoint, sans être obligé de connaître le JavaScript.

Même si la portée de ce tutoriel est limitée, il est évident qu’il est souvent nécessaire d’introduire quelques lignes de JavaScript dans SharePoint, sans être obligé de faire un développement d’une feature ou d’une solution avec Visual Studio.

Pour nous simplifier le travail, nous utilisons jQuery. Grâce à de nouvelles fonctions JavaScript, cette bibliothèque simplifie l’écriture des programmes.

Télécharger la bibliothèque jQuery

Commencez par télécharger la dernière version Uncompressed de jQuery. Au moment où ces lignes sont écrites, il s’agit de la version 1.9.0 de jQuery.

Stockez le fichier sur votre ordinateur et renommez le jquery.js. Dans les environnements complexes, il peut être intéressant d’identifier chaque version de jQuery. Dans notre cas, il est plus simple d’avoir une seule référence.

Initiation à JQuery dans SharePoint

Pour pouvoir utiliser le fichier jquery.js, il est nécessaire de le téléverser (« uploader ») dans une bibliothèque quelconque de votre site (ou collection de sites). Toutefois, il est nécessaire que les utilisateurs possèdent des droits de lecture sur cette bibliothèque.

Il est conseillé de créer une bibliothèque dédiée. Pour cela, positionnez-vous sur votre site puis cliquez sur Actions du site > Nouvelle bibliothèque de documents.

Nommez la bibliothèque Scripts. Bien évidemment, vous pouvez la nommer comme vous le souhaitez.

Tout d’abord, sous Navigation, dans Afficher le composant bibliothèque de documents dans le volet Lancement rapide, cochez Non.

Puis, dans la section Document-Historique des versions, dans Créer une version à chaque modification d’un fichier dans le type de liste bibliothèque des documents, cochez Oui.

Ensuite, sous Modèle de document, sélectionnez Aucun puis cliquez sur le bouton Créer.

Enfin, cliquez sur le bouton Ajouter un document, cliquez sur Parcourir et « uploader » jquery.js dans la bibliothèque.

JQuery dans bibliotheque
JQuery dans bibliotheque

Vérifier le bon fonctionnement de la bibliothèque jQuery

Avant toute chose, il est important de vérifier que la bibliothèque jQuery est valide et fonctionne bien dans votre environnement. En effet, dans cette initiation à JQuery dans SharePoint, vous devez vérifier chacune des étapes avant d’aller plus loin.

Avec le Bloc-notes (notepad.exe), créez un petit fichier VerifierJQuery.js avec le texte suivant:

<script type= »text/javascript » src= »/Scripts/jquery.js »></script>
<script type= »text/javascript »>
$(document).ready(function() {
alert(« jQuery fonctionne parfaitement bien ! »);
});
</script>

Adapter le script à votre environnement

La première ligne sert à référencer l’appel à jQuery. Vous devez donc modifier votre fichier pour que la première instruction src pointe bien vers l’emplacement du fichier jquery.js hébergé dans la bibliothèque Scripts.

Pour le faire, le plus simple est d’ouvrir la bibliothèque Scripts, de faire un clic-droit sur le fichier jquery puis Copier le raccourci. Ensuite, vous collez le chemin derrière l’instruction src= de la première ligne du fichier VerifierJQuery.js, à la place de /Scripts/jquery.js.

La seconde ligne indique l’ouverture de votre script. Elle se termine avec la dernière ligne.//

Pour exécuter du code dès que le document est prêt à être manipulé, jQuery dispose de l’instruction événement prêt (« ready event »):

$(document).ready(function() {

});

Le code finalement exécuté est:

alert(« jQuery fonctionne parfaitement bien ! »);

Si tout va bien, ce code affiche le message « jQuery fonctionne parfaitement bien ! ». Dans le cadre de cette initiation à JQuery dans SharePoint, il faut que vous soyez attentif à vérifier le bon fonctionnement de chaque étape.

Enregistrez vos modifications faites dans le fichier VerifierJQuery.js.

Uploadez aussi votre fichier VerifierJQuery.js dans la bibliothèque Scripts. C’est la même bibliothèque que celle qui héberge le fichier jQuery.js. Techniquement, il pourrait s’agir de bibliothèques différentes mais cela n’est important pour nous.

Une fois le fichier VerifierJQuery.js uploadé, faites un clic-droit dessus puis Copier le raccourci. Dans un instant, vous aurez besoin de coller le chemin.

Création d’une page de test

Pour tester le bon fonctionnement de jQuery, il faut créer une simple page dans SharePoint.

Pour cela, ouvrez un nouvel onglet dans votre navigateur puis allez sur la page d’accueil de votre site puis cliquez sur Actions du site puis Autres options.

Filtrez sur Page et sélectionnez le modèle Page.

Dans le volet de droite, saisissez le nom Test puis cliquez sur le bouton Créer.

Si vous voyez apparaître un message vous prévenant qu’il faut une bibliothèque de pages Wiki et une bibliothèque de pièces jointes par défaut, cliquez sur le bouton Créer de cette page.

Une fois que la page est créée, vous devez insérer un composant webpart (ruban Insérer) Editeur de contenu (qui se trouve dans la catégorie) Média et contenu.

Composant webpart editeur de contenu
Composant webpart editeur de contenu

Une fois que le composant Editeur de contenu est inséré, survolez le avec la souris pour faire apparaître son menu d’édition:

Cliquez sur Modifier le composant Webpart: sur la droite de l’écran, les paramètres de l’Editeur de contenu s’affiche.

Menu du Composant WebPart Editeur de contenu
Menu du Composant WebPart Editeur de contenu

Sous Lien du contenu, coller le contenu du presse-papier. Normalement, il contient l’emplacement du fichier VerifierJQuery.js.

Ensuite, cliquez sur le bouton OK.

Notamment, vous devez avoir la fenêtre suivante:

Initiation à JQuery dans SharePoint
jQuery fonctionne parfaitement bien !

Enregistrez votre page: le message ci-dessus s’affiche à nouveau.

Ce message confirme que vous êtes prêt à aller au-delà de cette simple initiation à JQuery dans SharePoint.