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

S'applique à

  • Windows10
  • Windows10 Mobile

Cette procédure pas à pas décrit comment tirer parti de la possibilité d’inclure des scripts dans un package d’approvisionnement Windows10 pour installer des applications Win32. D'autres opérations de script que l’installation d’applications peuvent également être effectuées, toutefois, certaines précautions sont nécessaires pour éviter un comportement inattendu lors de l’exécution du script (voir les Remarques ci-dessous).

Configuration requise: Kit de déploiement et d’évaluation Windows (ADK) pour Windows10, version1511 ou supérieure

Note

Ce scénario est uniquement pris en charge pour l’installation d’applications sur Windows10 pour bureau, version1511 ou supérieure.

Assembler les ressources d’application

  1. Sur l’appareil sur lequel vous écrivez le package, placez l’ensemble de 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. Le programme d’installation de nombreuses applications s'appelle couramment «install.exe» ou un équivalent, ce qui peut produire un conflit de noms. 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 compresser les ressources au format .cab pour faciliter leur intégration dans les packages d’approvisionnement.

Compresser les ressources d’application au format .cab

  1. Créez un fichier .DDF comme ci-dessous, en remplaçant file1 et file2 par les fichiers que vous souhaitez packager 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

Dans Windows10, version1607 et versions antérieures, créez un script pour effectuer les opérations nécessaires afin d'installer 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.

Dans Windows10, version1703, vous n’avez pas besoin de créer un script orchestrator. 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).

Note

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’est pas intégrée, donc la journalisation doit être intégrée dans le 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é d'enregistrer chaque action exécuté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 répercuter les 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

Cet exemple de script offre une journalisation qui montre comment exécuter un script powershell à partir du paramètre de commandes d'approvisionnement. Notez que le script PowerShell référencé dans 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 aucune interaction 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 la décompression d’un fichier .cab à partir du script de commandes d'approvisionnement, ainsi que l’installation du setup.exe décompressé

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 CommandLines dans Windows10, version1703.

Dans Windows10, version1607 et versions antérieures, une CommandLine est autorisée 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 orchestrator est ce qui doit être appelé à partir de la ligne de commande CommandLine spécifiée dans le package.

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

ParamètreICD 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'en existe qu'une seule, mais plusieurs ressources peuvent être 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 au package d'approvisionnement (Windows10, version1607)

Une fois le fichier de commandes écrit et les ressources référencées prêtes à intégrer, vous pouvez les ajouter à un package d’approvisionnement dans le Concepteur 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 les 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 commandes dans les 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 actions suivantes cela entraînera un comportement incertain et risque de mettre l’appareil dans un état irrécupérable si elle est exécutée pendant l’installation ou l'expérience Out of Box: a. Se répercuter sur la console b. Afficher quoi que ce soit sur l’écran c. 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 mis dans un état irrécupérable en raison d’un script incorrect, vous pouvez le réinitialiser en consultant Options de récupération dans Windows10.
  4. Les ressources CommandFile sont déployées sur le périphérique dans un dossier temporaire unique pour chaque package.
    • Pour Windows10, version1607 et antérieure:. Pour les packages ajoutés lors de l’expérience out of box, ce dossier se trouve généralement dans %WINDIR%\system32\config\systemprofile\appdata\local\Temp\ProvisioningPkgTmp\<{PackageIdGuid}>\Commands b. Pour les packages ajoutés en double-cliquant sur un périphérique déjà déployé, il se trouvera dans le dossier temporaire de l’utilisateur qui exécute le PPKG: %TMP%\ProvisioningPkgTmp\<{PackageIdGuid}>\Commands
    • Pour Windows10, version1703: a. Pour les packages ajoutés lors de l’expérience out of box, il s’agit généralement de %WINDIR%\system32\config\systemprofile\appdata\local\Temp\ProvisioningPkgTmp\<{PackageIdGuid}>\Commands\0 Le 0 après 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. b. Pour les packages ajoutés en double-cliquant sur un périphérique déjà déployé, il se trouvera 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 sur l’écran.

    Note

    Il faut compter un délai de 30minutes 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. Si les packages sont ajoutés sur des systèmes existants en double-cliquant pour les installer, aucune notification n'indiquera la fin de l'exécution de l'approvisionnement ou du script

Rubriques connexes