Maitrisez le déploiement de vos applications

I. Présentation

Il existe de nombreuses techniques pour gérer les applications déployées dans un parc informatique, mais pour faire simple, je vous conseille de choisir une technologie de scripting, de définir un squelette générique (ou modèle) ainsi qu’une convention de nommage des scripts. Ensuite, il convient de recenser les différents éléments au sein d’un tableau de synthèse.

 

II. Quelques bonnes pratiques

Ce paragraphe n’a pas la prétention de vous dire comment faire le boulot, mais de simplement vous sensibiliser sur l’importance de choisir une méthode, dans le but d’assurer une “maintenabilité” de vos travaux en matière de déploiement d’applications.

A. Définir un squelette générique (ou modèle)

Après avoir choisi une technologie de scripting, telle que Powershell 😉 , il est de bon ton de constituer une bibliothèque de fonctions élémentaires que vous inclurez ensuite dans votre script de déploiement. Il n’est pas impératif de les inclure dans le script lui-même et les déposer dans un sous-dossier associé peut en faciliter la maintenance.

fonctions à réaliser en priorité, orientez vos travaux sur :

  • Fonction d’exécution et d’attente de processus incluant la gestion des codes retour
  • Fonction de journalisation des sorties, activité et erreurs
  • Fonctions élémentaires de copie de dossier et de fichier, de gestion du registre, des bibliothèques système DLL…

Pour garantir des processus de déploiement homogènes, pensez également a définir les commutateurs retenus pour l’installation des packages MSI, soit au sein d’une fonction en script, soit plus simplement dans une documentation.

Éventuellement, reportez-vous à mes articles sur les techniques de Scripting et déploiement d’applications

 

B. Tableau de synthèse

Au delà d’un simple inventaire, il est intéressant de recenser toutes les propriétés ou particularités d’une application au sein d’un tableau de synthèse ou d’une petite base de données.

Parmi les caractéristiques essentielles, je citerais  :

  • Le nom de l’application, l’éditeur, la version, le langage
  • L’emplacement du dossier contenant les sources
  • La ligne de commande d’installation silencieuse (et éventuellement de désinstallation)
  • L’architecture processeur
  • Le type de licence (Afin d’instaurer une limitation / contrainte de diffusion)

Cette liste n’est pas exhaustive, mais doit être en mesure de fournir l’ensemble des éléments nécessaires à la rédaction et la maintenance des scripts et processus de déploiement des applications.

Pour générer un tableau à partir des applications existantes dans un partage MDT, (sans la console) vous pouvez utiliser un script tel que celui-ci:

#############################################################################
# NOM : Export-Apps.ps1
#
# BUT : Script de recensement des applications MDT
#
# USAGE : Affiche toutes les applications MDT dans un tableau (DataGrid) - Filtrage
# .\Export-Apps.ps1 -DeployRoot Z:\ShareMDT
# Exporte toutes les applications MDT dans un fichier .CSV
# .\Export-Apps.ps1 -DeployRoot \\192.168.99.32\DeploymentShare -ExportCsv .\ApplisMDT.csv
#
#############################################################################

param ($DeployRoot, $ExportCsv)
if ($DeployRoot -eq $null) { 
  $DeployRoot = Read-Host "Chemin racine du partage de déploiement "
}
$AppFile = "$DeployRoot\Control\Applications.xml"
if (Test-Path -Path $AppFile) {
  [xml]$app =  Get-Content $AppFile
  $MDTApps = $app.applications.ChildNodes | 
     select-object Name, Comments, ShortName, Source, CommandLine,`
       Version, Publisher, Language, WorkingDirectory, CreatedTime,`
       CreatedBy, LastModifiedTime, LastModifiedBy, reboot, hide, `
       enable, guid, UninstallKey
  if ($ExportCsv -ne $null) { 
     $MDTApps | Export-Csv -path $ExportCsv
   } else { 
     $MDTApps | Out-GridView
  }
 } else {
  write "Le fichier [$AppFile] est introuvable. Fin du script"
}

Note : Ne confondez pas la propriété facultative “UninstallKey”, avec le GUID de l’application (ou du bundle).  Contrairement à la seconde  entrée automatiquement générée par le MDT, la valeur de “UninstallKey” doit correspondre, si applicable, à l’identifiant unique du produit, que l’on retrouve sous  : HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall (Retirez  “Wow6432Node” pour  les systèmes 32 bits)

Cette information permet de retrouver la commande de désinstallation du produit sous la clé “UninstallString” comme par exemple “msiexec /X {41785C66-90F2-40CE-8CB5-1C94BFC97280}”, mais également pour détecter la présence d’une application déjà installé.

(cf “tester les prérequis“)

 

C. Établir une convention de nommage

Là encore, ce choix n’est pas impératif, mais la mise en oeuvre d’une petite règle de nommage des scripts peut faire gagner un temps précieux au quotidien. Un tel choix vous appartient entièrement mais ceux qui serait en manque d’inspiration, je vous propose les bases suivantes :

  • Nom + version : C’est une évidence, mais définir une règle, ne serait-ce que pour l’absence d’espace, la ponctuation, les majuscules, la longueur, constitue un repère important pour un travail en équipe.
  • WIM-In / TS-Post : Dans le cadre du MDT, ajouter un préfixe distinctif de la phase de déploiement. Indique si l’application ou la configuration est intégrée dans l’image WIM (Avant la capture) ou installée durant le processus de finalisation (Post-Install)
  • Drv / App / Set / X : Un indicateur sur le type de package peut être pertinent pour distinguer l’installation d’un pilote (Drv), d’une application ou d’un outil (App) ou bien un opération de configuration (Set). Rien ne vous empêche de gardez une option générique pour les cas qui ne rentrent pas dans le rang.
  • x86 / x64 / x86_x64 : Enfin, précisez l’architecture supportée par le script (ou l’application) afin d’identifier rapidement les contraintes.

 

D. Définir une structure de stockage

Par application, créez un dossier du nom (et version) de l’application, dans lequel vous déposez le script d’installation silencieuse et les fichiers dans un sous-dossier “Sources”

AppDeploy00

Selon vos choix précédents, vous pouvez également y déposer les outils ou bibliothèques de fonctions, à moins que vous optiez pour un stockage centralisé (simplification de la maintenance)

 

III. Quelques outils à découvrir

Pour les adeptes du prêt à l’emploi …

A. MDT Application manager

Cet outil  gratuit, écrit en Powershell et compilé offre une alternative intéressante pour la gestion des applications hébergées sur un partage de déploiement MDT 2013.

AppDeploy01 AppDeploy02

Simple et intuitif, ce programme ne semble fonctionner que sur des plateformes 64 bits sous Windows 8.1  ou ultérieur. Pour les aficionados de Windows 7, passez votre chemin….

Pour plus d’information et télécharger cet outil, c’est ici  

B. Powershell App Deployment Toolkit

Si vous êtes en pleine réflexion sur le déploiement automatisé d’application (pas nécessairement sur MDT), je vous conseille de jeter un œil à ce projet https://powersheller.wordpress.com/tag/powershell/ délivré sous licence Microsoft Public. Pour le site officiel, c’est ici. Il s’agit en fait d’une boite à outil entièrement conçue en Powershell enrichie d’interfaces graphique d’utilisation.

Vous y trouverez tout le nécessaire pour réaliser des déploiements automatisé de qualité. Si l’outil ne vous convient pas, il peut constituer une excellente source d’inspiration pour la réalisation de vos propres scripts.

L’outil fonctionne par défaut dans la langue de Shakespeare mais rassurez-vous les interfaces graphiques sont disponibles dans 11 langues différentes, dont le français. Il suffit pour cela de modifier le fichier de configuration AppDeployToolkitConfig.xml comme indiqué :

<InstallationUI_LanguageOverride>FR</InstallationUI_LanguageOverride>

Et le tour est joué.

AppDeploy03

Pour agrémenter le tout, cet outil est fourni avec une documentation très détaillée (en anglais) de plus de 100 pages…

Pour le téléchargement c’est ici https://github.com/PSAppDeployToolkit/PSAppDeployToolkit/releases

 

Bon déploiement à tous 🙂

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. Apprenez comment les données de vos commentaires sont utilisées.