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

Scripting Windows

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. Le fonctionnement de MSI et Windows Installer est détaillé en français dans cet excellent document.

Installation automatisée des 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 2008 R2, y compris les postes clients (par exemple: Windows XP, Vista, Seven).

Powershell de Microsoft, apparu avec Vista, fonctionne sur un nombre plus limité de plateformes. Toutefois, 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

Le langage de script AutoIt a bien d’autres avantages

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

Interface Graphique Réalisable Avec Autoit

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.

Enfin, il gère les expressions régulières et il est compilable sans la nécessité d’un runtime quelconque.

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).

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

D’autres utilisations des Scripts

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. Outre les installations de logiciels ou d’imprimantes, les scripts permettent d’automatiser l’analyse statistique des documents qui vous sont remis.

SharePoint: Métadonnées gérées

Lors de la mise en place de SharePoint, la planification de la taxonomie est une étape cruciale.

Une fois que le référentiel de données est défini, créé et alimenté, il reste à définir les méthodes d’accès à ces données qui doivent être simples et conviviales.

La réponse de Microsoft consiste à s’appuyer sur l’application de services des métadonnées gérées de SharePoint.

C’est un service qui permet aux organisations de définir leurs structures de métadonnées et celles qui sont disponibles dans SharePoint. Les utilisateurs peuvent naviguer rapidement dans l’arborescence pour attribuer des métadonnées pertinentes associées au contenu. Le service de métadonnées peut être utilisé pour fournir des métadonnées dans plusieurs fermes de l’organisation.

Toutefois, le référentiel de données a été créé dans les organisations, bien avant l’arrivée de SharePoint et l’application de services des Métadonnées gérées. Aussi, une proposition simple d’alimentation automatisée des métadonnées gérées est vue à la fin de l’article.

Saisies assistées

L’utilisation du magasin de métadonnées gérées permet de faire des saisies assistées. Par exemple, si vous avez défini la taxonomie suivante dans les métadonnées gérées:

Arborescence de la taxonomie des métadonnées gérées

Une liste Equipements est créée avec les 3 colonnes suivantes :

  • Lots: champ Titre renommé
  • Electro-Ménager: colonne de type Métadonnées gérées qui pointe sur l’ensemble de termes ‘Blanc’
  • Meubles: colonne de type Métadonnées gérées qui pointe sur l’ensemble de termes ‘Brun’

Lorsque l’utilisateur débute une saisie dans le champ Electro-Ménager, les valeurs correspondantes s’affiche.

Saisie assistée avec les métadonnées gérées

Il est aussi possible d’avoir la liste de toutes les valeurs en cliquant sur l’icône en forme de double étiquettes:

Liste de toutes les valeurs d'un ensemble de termes

Provisionnement des Métadonnées gérées

La création de l’application de services des métadonnées gérées peut se faire à l’aide de l’interface graphique utilisateur ou via PowerShell. L’utilisation de PowerShell est incontestablement plus souple, plus rapide et plus puissante. Tuoutefois, pour des raisons purement pédagogiques, vous le ferez avec l’interface graphique.

Allez dans l’administration centrale de SharePoint 2010: Central Administration > Manage service applications > New  (dans le ruban) puis renseignez les champs:

Création de l'application de services des métadonnées gérées

Une fois que l’application de service est créée, il est possible d’accéder aux autres paramètres.

Pour provisionner l’application de services des métadonnées gérées, cliquez simplement dessus: la création de la taxonomie est simple et intuitive grâce à l’utilisation du clic droit.

Par contre, n’oubliez pas d’indiquer que votre compte est administrateur du magasin de termes, sinon vous ne pourrez rien faire. Pensez aussi éventuellement à indiquer la langue par défaut.

Provisionnement du magasin de termes des métadonnées gérées

Les langues s’ajoutent grâce aux pack de langues SharePoint.

Concentrateur de type de contenu

Lors de la création, l’assistant demande de renseigner la zone intitulée Content Type hub.

Le Content Type Hub permet de partager les types de contenu avec les autres collections de sites de la ferme ou d’autres fermes.

Autrement dit, vous définissez une seule fois vos types de contenu sur une collection de sites quelconque (par exemple, http://formation).

Allez dans les paramètres de la collection de sites qui servira à publier les types de contenu. Dans ses paramètres, cliquez sur Fonctionnalités de la collection de sites et recherchez la fonctionnalité intitulée Concentrateur de syndication de type de contenu. Activez cette fonctionnalité:

Fonctionnalité Concentrateur de syndication de type de contenu

Ensuite, vous choisissez les types de contenu que vous souhaitez publier sur d’autres collections de sites.

Par exemple, si vous voulez partager le type de contenu Paris Core Columns, allez dans ses paramètres et cliquez sur Gérer la publication de ce type de contenu:

Paramètres d'un type de contenu

Ensuite, cliquez sur le bouton OK pour valider la publication.

Publication d'un type de contenu

Si vous apportez des modifications à ce type de contenu (ajout d’une colonne, etc), pensez à le republier manuellement.

Afin d’actualiser les sites qui sont abonnés à ce type de contenu, vous devez le demander explicitement. Pour cela, allez dans les paramètres d’administration de la collection de sites qui héberge les types de contenu à publier:

Journaux

Cliquez sur le lien Publication de type de contenu et cochez la case Actualiser tous les types de contenu publiés lors de la prochaine mise à jour.

Publication de type de contenu

Sous la section Concentrateurs s’affiche la liste de tous les types de contenu qui doivent être publiés: Paris Core Columns, Nantes Core Columns, etc.

Erreurs liées aux métadonnées gérées

Si la publication ne s’effectue pas correctement, vérifiez le journal des erreurs de publication de type de contenu.

Vous pouvez aussi vérifier un autre journal: le Journal des erreurs des applications de services de type de contenu. Ce journal se trouve dans les paramètres d’administration de la collection de sites qui héberge les types de contenu à publier.

JournauxIl donne des détails sur des dysfonctionnements éventuels des applications de service des métadonnées gérées.

Un problème souvent rencontré concerne la création d’un type de contenu, ou d’une colonne de site, dans une collection de site cible et qui porte le même nom qu’un type de contenu (ou une colonne de site) publié.

Compte-tenu de la diversité des causes possibles, un autre article viendra compléter celui-ci pour exposer des cas d’erreurs liées aux métadonnées gérées.

Import dans le magasin de données

Lorsqu’il existe déjà un référentiel « maison » de données, il faut imaginer une solution pour alimenter le magasin des métadonnées de SharePoint.

Il est possible d’alimenter le magasin de données à l’aide d’un fichier au format CSV. Un exemple de fichier est donné par SharePoint dans les propriétés (« page d’accueil ») de l’application de service des métadonnées gérées.

Toutefois, cela n’est possible que ponctuellement et ce n’est pas envisageable dans une véritable organisation.

Une autre solution consiste à développer avec Visual Studio un job SharePoint pour le faire systématiquement. Un développeur expérimenté peut le faire en 4/5 jours selon la complexité de la tâche.

Une dernière solution privilégie la simplicité avec PowerShell.

Le référentiel de données existant produit des fichiers au format texte et encodés en UTF-8. Ces fichiers contiennent toutes les valeurs de listes en respectant le formalisme attendu par SharePoint.

Ensuite, grâce au travail de Vlad Catrinescu, un petit script PowerShell et une tâche planifiée permet d’automatiser l’import.

Le fichier ZIP est fourni avec un exemple complet pour importer des données (fictives).

Metadata.zip

SharePoint 2010: Script PowerShell – Créer une liste / Ajouter une colonne dans une liste personnalisée / Ajouter une colonne dans la vue

Parmi toutes les possibilités offertes par SharePoint 2010, sa gestion avec PowerShell est probablement une des plus puissantes, notamment pour les administrateurs.

Un bon exemple d’application est celui de pouvoir créer de nouvelles listes sur les sites par un script PowerShell.

Lors de la création d’une nouvelle liste, vous devez d’abord indiquer à SharePoint le modèle à utiliser. Pour lister tous les modèles, cliquez sur Start > All programs > Microsoft SharePoint 2010 Products > Microsoft SharePoint 2010 Products (Run as administrator):

$Web=Get-SPWeb http://demo
$Web.ListTemplates | Select Name, Description

Vous obtenez le nom et le début de la description de tous les modèles disponibles dans votre collection de sites. Choisissez le modèle que vous vous voulez et créez la liste avec la méthode Add().

$Template=$Web.ListTemplates[« Custom List »]
$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.

Une fois la liste créée, il est pratiquement indispensable de rajouter des colonnes. Vous indiquez à SharePoint la liste sur laquelle vous travaillez, puis 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)

La colonne a bien été ajoutée, mais vous ne la voyez pas ! Pour la voir, vous allez dans les paramètres de la liste, et sous Colonnes, vous retrouvez bien:

FruitID Une seule ligne de texte

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

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

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