Utiliser un script pour installer une application de bureau dans des packages d’approvisionnement

Cette procédure pas à pas explique comment inclure des scripts dans un package d’approvisionnement de client Windows pour installer des applications Win32. Des opérations de script autres que l’installation d’applications peuvent également être effectuées. Toutefois, certaines précautions sont nécessaires pour éviter tout comportement involontaire pendant l’exécution du script (voir remarques ci-dessous).

Assembler les ressources d’application

  1. Sur l’appareil sur lequel vous créez le package, placez toutes vos ressources dans un emplacement connu. Chaque ressource doit avoir un nom unique, car tous les fichiers seront copiés dans le même répertoire temporaire sur l’appareil. Il est courant pour de nombreuses applications d’avoir un programme d’installation appelé « install.exe » ou similaire, et il peut y avoir un chevauchement de noms à cause de cela. Pour résoudre ce problème, vous pouvez utiliser la technique décrite dans l’étape suivante pour inclure une structure de répertoire complète qui est ensuite répercutée sur le répertoire temporaire de l’appareil. L’usage le plus courant consiste à inclure un sous-répertoire pour chaque application.

  2. Si vous devez inclure une structure de répertoires de fichiers, vous devez configurer les ressources pour faciliter leur inclusion dans les packages d’approvisionnement.

Compresser les ressources d’application au format .cab

  1. Créez un .DDF fichier comme ci-dessous, en remplaçant file1 et file2 par les fichiers que vous souhaitez empaqueter et en ajoutant le nom du fichier/répertoire.

    ;*** MSDN Sample Source Code MakeCAB Directive file example
    ;
    .OPTION EXPLICIT  ; Generate errors on variable typos
    .set DiskDirectoryTemplate=CDROM  ; All cabinets go in a single directory
    .Set MaxDiskFileCount=1000; Limit file count per cabinet, so that
    ; scanning is not too slow
    .Set FolderSizeThreshold=200000   ; Aim for ~200K per folder
    .Set CompressionType=MSZIP
    ;** All files are compressed in cabinet files
    .Set Cabinet=on
    .Set Compress=on
    ;-------------------------------------------------------------------
    ;** CabinetNameTemplate = name of cab
    ;** DiskDirectory1 = output directory where cab will be created
    ;-------------------------------------------------------------------
    .Set CabinetNameTemplate=tt.cab
    .Set DiskDirectory1=.
    ;-------------------------------------------------------------------
    ; Replace <file> with actual files you want to package
    ;-------------------------------------------------------------------
    <file1>
    <file2>
    ;*** <the end>
    
  2. Utilisez makecab pour créer les fichiers .cab.

    Makecab -f <path to DDF file>
    

Créer le script pour installer l’application

Créez un script pour effectuer le travail nécessaire pour installer la ou les applications. Les exemples suivants sont fournis pour vous aider à démarrer la création du script orchestrator qui exécutera les programmes d’installation requis. Dans la pratique, le script orchestrator peut faire référence à des ressources beaucoup plus nombreuses que dans ces exemples.

Vous n’avez pas besoin de créer un script d’orchestrateur. Vous pouvez disposer d'une ligne de commande par application. Si nécessaire, vous pouvez créer un script qui enregistre la sortie par application, comme indiqué ci-dessous (au lieu d’un script orchestrator pour le package d’approvisionnement entier).

Remarque

Toutes les actions effectuées par le script doivent se produire en mode silencieux, sans afficher d'interface utilisateur et sans nécessiter d'interaction utilisateur.

Les scripts seront exécutés sur le périphérique dans le contexte du système.

Exemple de débogage

La journalisation granulaire n’étant pas intégrée, la journalisation doit être intégrée au script lui-même. Voici un exemple de script qui enregistre « Hello World » dans un fichier journal. Lorsque vous l'exécutez sur l’appareil, le fichier journal sera disponible une fois l'approvisionnement terminé. Comme vous le verrez dans les exemples suivants, il est recommandé de journaliser chaque action effectuée par votre script.

set LOGFILE=%SystemDrive%\HelloWorld.log
echo Hello, World >> %LOGFILE%

Exemple .exe

Cet exemple de script montre comment créer un fichier de sortie de journal sur le lecteur système, installer une application à partir d’un programme d’installation .exe et faire écho aux résultats dans le fichier journal.

set LOGFILE=%SystemDrive%\Fiddler_install.log
echo Installing Fiddler.exe >> %LOGFILE%
fiddler4setup.exe /S >> %LOGFILE%
echo result: %ERRORLEVEL% >> %LOGFILE%

Exemple .msi

Il est identique au programme d’installation précédent, mais installe l’application à partir d’un programme d’installation MSI. Notez que msiexec est appelé avec l’indicateur /silencieux pour répondre à l'exigence d'exécution en mode silencieux des scripts à partir d'un package d’approvisionnement.

set LOGFILE=%SystemDrive%\IPOverUsb_install.log
echo Installing IpOverUsbInstaller.msi >> %LOGFILE%
msiexec /i IpOverUsbInstaller.msi /quiet >> %LOGFILE%
echo result: %ERRORLEVEL% >> %LOGFILE%

Exemple PowerShell

Il s’agit d’un exemple de script avec journalisation qui montre comment exécuter un script PowerShell à partir du paramètre commandes d’approvisionnement. Le script PowerShell référencé à partir de cet exemple doit également être inclus dans le package et respecter les mêmes exigences que tous les scripts exécutés à partir du package d’approvisionnement : il doit s’exécuter en mode silencieux, sans interaction de l’utilisateur.

set LOGFILE=%SystemDrive%\my_powershell_script.log
echo Running my_powershell_script.ps1 in system context >> %LOGFILE%
echo Executing "PsExec.exe -accepteula -i -s cmd.exe /c powershell.exe my_powershell_script.ps1" >> %LOGFILE%
PsExec.exe -accepteula -i -s cmd.exe /c 'powershell.exe my_powershell_script.ps1' >> %LOGFILE%
echo result: %ERRORLEVEL% >> %LOGFILE%

Extrait d'un exemple de fichier .CAB

Cet exemple de script montre l’extension d’un .cab à partir du script de commandes d’approvisionnement et l’installation du setup.exe développé

set LOGFILE=%SystemDrive%\install_my_app.log
echo Expanding installer_assets.cab >> %LOGFILE%
expand -r installer_assets.cab -F:* . >> %LOGFILE%
echo result: %ERRORLEVEL% >> %LOGFILE%
echo Installing MyApp >> %LOGFILE%
setup.exe >> %LOGFILE%
echo result: %ERRORLEVEL% >> %LOGFILE%

Appel de plusieurs scripts dans le package

Votre package d’approvisionnement peut inclure plusieurs CommandFiles.

Vous êtes autorisé à utiliser une ligne de commande par package d’approvisionnement. Les fichiers de commandes ci-dessus sont des scripts orchestrator qui gèrent l’installation et les appels des autres scripts inclus dans le package d'approvisionnement. Le script d’orchestrateur est ce qui doit être appelé à partir de la ligne de commande spécifiée dans le package.

Voici un tableau décrivant cette relation, à l’aide de l’exemple PowerShell ci-dessus :

Paramètre ICD Valeur Description
ProvisioningCommands/DeviceContext/CommandLine cmd /c PowerShell_Example.bat Ligne de commande nécessaire pour appeler le script orchestrator.
ProvisioningCommands/DeviceContext/CommandFiles PowerShell_Example.bat Script orchestrator unique référencé par la ligne de commande qui gère l’appel dans les programmes d’installation requis ou l'exécution d’autres actions, telles que décompresser des fichiers cab. Ce script doit exécuter la journalisation requise.
ProvisioningCommands/DeviceContext/CommandFiles my_powershell_script.ps1 Autres ressources référencées par le script orchestrator. Dans cet exemple, il n’y en a qu’une seule, mais il peut y avoir de nombreuses ressources référencées ici. Il est courant d'utiliser l’orchestrateur pour appeler une série de programmes d’installation install.exe ou setup.exe afin d'installer plusieurs applications. Chacun de ces programmes d’installation doit être inclus en tant que ressource ici.

Ajouter un script de package d'approvisionnement

Une fois le fichier de commandes écrit et les ressources référencées prêtes à être ajoutées, vous pouvez les ajouter à un package d’approvisionnement dans le Designer de configuration Windows.

À l’aide du Concepteur de configuration Windows, spécifiez tous les détails sur la façon dont le script doit être exécuté dans le paramètre de ligne de commande CommandLine dans le package d’approvisionnement. Cela comprend les indicateurs ou d'autres paramètres que vous tapez habituellement sur la ligne de commande. Par exemple, si le package contenait un programme d’installation d'application appelé install.exe et un script utilisé pour automatiser l’installation appelée InstallMyApp.bat, le paramètre ProvisioningCommands/DeviceContext/CommandLine doit être configuré comme suit :

cmd /c InstallMyApp.bat

Dans le Concepteur de configuration Windows, voici à quoi cela ressemble :

Ligne de commande dans Personnalisations sélectionnées.

Vous devez également ajouter les ressources pertinentes pour cette ligne de commande, notamment le script orchestrator et les autres ressources auxquelles il fait référence, comme les programmes d’installation ou les fichiers .cab.

Dans le Concepteur de configuration Windows, vous ajoutez pour ce faire des fichiers sous le paramètre ProvisioningCommands/DeviceContext/CommandFiles.

Fichiers de commande dans Personnalisations sélectionnées.

Lorsque vous avez terminé, générez le package.

Remarques

  1. Aucune interaction utilisateur ou sortie de console n’est prise en charge via ProvisioningCommands. Toute l'exécution doit se faire en mode silencieux. Si votre script tente d’effectuer l’une des opérations suivantes, il provoque un comportement non défini et peut placer l’appareil dans un état irrécupérable s’il est exécuté pendant l’installation ou l’expérience Out of Box :

    1. Écho à la console
    2. Afficher tout ce qui se trouve à l’écran
    3. Inviter l’utilisateur avec une boîte de dialogue ou l’Assistant Installation
  2. Lorsqu'il est appliqué au premier démarrage, l'approvisionnement s’exécute dès le début de la séquence de démarrage et avant l’établissement d’un contexte utilisateur ; veillez à inclure uniquement les programmes d’installation qui peuvent s’exécuter à ce stade. D'autres programmes d’installation peuvent être configurés via un outil de gestion.

  3. Si l’appareil est placé dans un état irrécupérable en raison d’un script incorrect, vous pouvez le réinitialiser à l’aide des options de récupération dans le client Windows.

  4. Les ressources CommandFile sont déployées sur le périphérique dans un dossier temporaire unique pour chaque package.

    1. Pour les packages ajoutés pendant l’expérience prête à l’emploi, il s’agit généralement de %WINDIR%\system32\config\systemprofile\appdata\local\Temp\ProvisioningPkgTmp\<{PackageIdGuid}>\Commands\0

      L’élément 0 suivant Commands\ fait référence à l’ordre d’installation et indique la première application à installer. Ce nombre est incrémenté pour chaque application du package.

    2. Pour les packages ajoutés en double-cliquant sur un appareil déjà déployé, celui-ci se trouve dans le dossier temporaire de l’utilisateur qui exécute le package d’approvisionnement : %TMP%\ProvisioningPkgTmp\<{PackageIdGuid}>\Commands\0

  5. La ligne de commande est exécutée en utilisant le répertoire dans lesquels les CommandFiles ont été déployés comme répertoire de travail. Cela signifie que vous n'avez pas besoin de préciser le chemin d’accès complet aux ressources dans la ligne de commande ou à partir de n’importe quel script.

  6. Le composant d’approvisionnement d’exécution tente d’exécuter les scripts à partir du package d'approvisionnement le plus tôt possible, en fonction du stade auquel le PPKG a été ajouté. Par exemple, si le package a été ajouté au cours de l’expérience Out-of-Box, il est exécuté immédiatement après l'application du package, alors que l’expérience Out-of-Box est toujours en cours. Cela se passe avant que les options de configuration du compte utilisateur soient présentées à l’utilisateur. Une boîte de dialogue de progression s’affiche et « Veuillez patienter » s’affiche à l’écran.

    Remarque

    Il faut compter un délai de 30 minutes pour le processus d'approvisionnement à ce stade. Tous les scripts et toutes les installations doivent se terminer pendant ce délai.

  7. Les scripts sont exécutés en arrière-plan, pendant que le reste de l'approvisionnement continue à s’exécuter. Pour les packages ajoutés sur des systèmes existants à l’aide du double-clic pour l’installation, il n’y a aucune notification indiquant que l’approvisionnement ou l’exécution du script est terminée