Lanceur d’interpréteur de commandes

À l’aide du lanceur d’interpréteur de commandes, vous pouvez configurer un appareil plein écran pour utiliser presque n’importe quelle application ou exécutable comme interpréteur de commandes personnalisé. L’application que vous spécifiez remplace l’interpréteur de commandes par défaut (explorer.exe) qui s’exécute généralement lorsqu’un utilisateur se connecte.

Vous pouvez également configurer Shell Launcher pour lancer différentes applications d’interpréteur de commandes pour différents utilisateurs ou groupes d’utilisateurs.

Il existe quelques exceptions aux applications et aux exécutables que vous pouvez utiliser en tant qu’interpréteur de commandes personnalisé :

  • Vous ne pouvez pas utiliser l’exécutable suivant comme interpréteur de commandes personnalisé : C:\\Windows\\System32\\Eshell.exe. L’utilisation de Eshell.exe comme interpréteur de commandes par défaut entraîne un écran vide après la connexion de l’utilisateur.
  • Vous ne pouvez pas utiliser une application Windows universelle comme interpréteur de commandes personnalisé.
  • Vous ne pouvez pas utiliser un interpréteur de commandes personnalisé pour lancer des applications Windows universelles, par exemple l’application Paramètres.
  • Vous ne pouvez pas utiliser une application qui lance un autre processus et se ferme en tant qu’interpréteur de commandes personnalisé. Par exemple, vous ne pouvez pas spécifier write.exe dans le lanceur Shell. Le lanceur d’interpréteur de commandes lance un interpréteur de commandes personnalisé et surveille le processus pour identifier le moment où l’interpréteur de commandes personnalisé se termine. Write.exe crée un processus wordpad.exe 32 bits et quitte. Étant donné que shell Launcher n’est pas au courant du processus wordpad.exe nouvellement créé, Shell Launcher prend des mesures en fonction du code de sortie de Write.exe, puis redémarrez l’interpréteur de commandes personnalisé.
  • Vous ne pouvez pas empêcher le système de s’arrêter. Pour Shell Launcher V1 et V2, vous ne pouvez pas bloquer la fin de la session en retournant FALSE lors de la réception du message WM_QUERYENDSESSION dans une application graphique ou en retournant FALSE dans la routine de gestionnaire ajoutée via la fonction SetConsoleCtrlHandler dans une application console.

Notes

Vous ne pouvez pas configurer à la fois le lanceur Shell et l’accès attribué sur le même système.

Utilisez Shell Launcher V2. Vous pouvez spécifier une application Windows universelle en tant qu’interpréteur de commandes personnalisé. Cochez La case Utiliser le lanceur d’interpréteur de commandes pour créer un kiosque Windows 10 pour connaître les différences entre Shell Launcher v1 et Shell Launcher V2.

Le lanceur d’interpréteur de commandes traite les clés de Registre Run et RunOnce avant de démarrer l’interpréteur de commandes personnalisé, de sorte que votre interpréteur de commandes personnalisé n’a pas besoin de gérer le démarrage automatique d’autres applications et services.

Le lanceur d’interpréteur de commandes gère également le comportement du système lorsque votre interpréteur de commandes personnalisé se ferme. Vous pouvez configurer le comportement de sortie de l’interpréteur de commandes si le comportement par défaut ne répond pas à vos besoins.

Les méthodes de contrôle de l’accès à d’autres applications de bureau et composants système peuvent être utilisées en plus de l’utilisation du lanceur Shell, telles que, stratégie de groupe, AppLocker et Mobile Gestion des appareils

Notes

Dans Shell Launcher v1, disponible dans Windows 10, vous pouvez uniquement spécifier une application de bureau Windows comme interpréteur de commandes de remplacement. Dans Shell Launcher v2, disponible dans Windows 10, version 1809 et versions ultérieures, vous pouvez également spécifier une application UWP comme interpréteur de commandes de remplacement.

Pour utiliser Shell Launcher v2 dans la version 1809, vous devez installer la mise à jour KB4551853.

Différences entre Shell Launcher v1 et Shell Launcher v2

Shell Launcher v1 remplace , l’interpréteur de commandes explorer.exepar défaut, par eshell.exe, qui peut lancer une application de bureau Windows. Shell Launcher v2 remplace explorer.execustomshellhost.exepar . Ce nouveau fichier exécutable peut lancer une application de bureau Windows ou une application UWP. En plus de vous permettre d’utiliser une application UWP pour votre interpréteur de commandes de remplacement, Shell Launcher v2 offre d’autres améliorations :

  • Vous pouvez utiliser une application de bureau Windows personnalisée qui peut ensuite lancer des applications UWP, telles que Paramètres et Clavier tactile.
  • À partir d’un interpréteur de commandeS UWP personnalisé, vous pouvez lancer des vues secondaires et s’exécuter sur plusieurs moniteurs.
  • L’application interpréteur de commandes personnalisée s’exécute en plein écran et peut exécuter d’autres applications en plein écran à la demande de l’utilisateur. Pour obtenir des exemples de configurations XML pour les différentes combinaisons d’applications, consultez Exemples pour Shell Launcher v2.

Configuration requise

Windows 10 Entreprise ou Windows 10 Éducation.

Terminologie

  • Activer : permet de rendre le paramètre disponible pour l’appareil et d’appliquer facultativement les paramètres à l’appareil.
  • Configurer: Pour personnaliser le paramètre ou les sous-paramètres.
  • Lanceur d’interpréteur de commandes incorporé : Cette fonctionnalité s’appelle Embedded Shell Launcher dans Windows 10 version 1511.
  • Lanceur d’interpréteur de commandes personnalisé : Cette fonctionnalité est appelée Lanceur shell dans Windows 10 version 1607 et ultérieure.

Activer le lanceur d’interpréteur de commandes

Le lanceur d’interpréteur de commandes est un composant facultatif qui n’est pas activé par défaut dans Windows 10. Elle doit être activée avant la configuration. Vous pouvez activer et configurer le lanceur d’interpréteur de commandes dans une image Windows 10 personnalisée (.wim) si Microsoft Windows n’a pas été installé. Si Windows a déjà été installé, vous devez activer Shell Launcher avant d’appliquer un package d’approvisionnement pour configurer Shell Launcher.

Activer le lanceur d’interpréteur de commandes à l’aide de Panneau de configuration

  1. Dans le champ Rechercher sur le web et Windows , tapez Programmes et fonctionnalités , puis appuyez sur Entrée ou appuyez ou sélectionnez Programmes et fonctionnalités pour l’ouvrir.
  2. Dans la fenêtre Programmes et fonctionnalités , sélectionnez Activer ou désactiver les fonctionnalités Windows.
  3. Dans la fenêtre Fonctionnalités Windows, développez le nœud Verrouillage de l’appareil, cochez ou décochez la case Lanceur d’interpréteur de commandes, puis sélectionnez OK.
  4. La fenêtre Fonctionnalités Windows indique que Windows recherche les fichiers requis et affiche une barre de progression. Une fois trouvée, la fenêtre indique que Windows applique les modifications. Une fois terminée, la fenêtre indique que les modifications demandées sont terminées.
  5. Sélectionnez Fermer pour fermer la fenêtre Fonctionnalités Windows .

Notes

L’activation du lanceur Shell ne nécessite pas de redémarrage de l’appareil.

Activer le lanceur d’interpréteur de commandes en appelant WESL_UserSetting

  1. Activez ou désactivez shell Launcher en appelant la fonction WESL_UserSetting.SetEnabled dans la classe WMI (Windows Management Instrumentation) WESL_UserSetting.
  2. Si vous activez ou désactivez le lanceur d’interpréteur de commandes à l’aide de WESL_UserSetting, les modifications n’affectent pas les sessions actuellement connectées ; vous devez vous déconnecter et vous reconnecter.

Cet exemple utilise une image Windows appelée install.wim, mais vous pouvez utiliser la même procédure pour appliquer un package d’approvisionnement (pour plus d’informations sur DISM, consultez Qu’est-ce que la maintenance et la gestion des images de déploiement.

Activer le lanceur d’interpréteur de commandes à l’aide de DISM

  1. Ouvrez une invite de commandes avec les privilèges Administrateur.

  2. Copiez install.wim dans un dossier temporaire sur le disque dur (dans les étapes suivantes, nous partons du principe qu’il est appelé C:\wim).

  3. Créez un nouveau répertoire.

    md c:\wim
    
  4. Montez l’image.

    dism /mount-wim /wimfile:c:\bootmedia\sources\install.wim /index:1 /MountDir:c:\wim
    
  5. Activez la fonctionnalité.

    dism /image:c:\wim /enable-feature /all /featureName:Client-EmbeddedShellLauncher
    
  6. Validez la modification.

    dism /unmount-wim /MountDir:c:\wim /Commit
    

Activer le lanceur d’interpréteur de commandes à l’aide de Designer de configuration Windows

Les paramètres du lanceur d’interpréteur de commandes sont également disponibles en tant que paramètres d’approvisionnement Windows afin que vous puissiez configurer ces paramètres à appliquer pendant l’exécution de l’image. Vous pouvez définir un ou tous les paramètres du lanceur Shell en créant un package d’approvisionnement à l’aide de l’Designer de configuration Windows, puis en appliquant le package d’approvisionnement pendant le temps de déploiement ou l’exécution de l’image. Si Windows n’a pas été installé et que vous utilisez le Designer de configuration Windows pour créer un support d’installation avec les paramètres du lanceur d’interpréteur de commandes inclus dans l’image ou si vous appliquez un package d’approvisionnement pendant l’installation, vous devez activer Shell Launcher sur le support d’installation avec DISM pour qu’un package d’approvisionnement s’applique correctement.

Utilisez les étapes suivantes pour créer un package d’approvisionnement qui contient les paramètres ShellLauncher.

  1. Créez un package d’approvisionnement dans Windows Configuration Designer en suivant les instructions de Créer un package d’approvisionnement pour Windows 10.
  2. Dans la page Personnalisations disponibles , sélectionnez Paramètres>d’exécution SMISettings>ShellLauncher.
  3. Définissez la valeur Activer sur ENABLE. D’autres options de configuration du lanceur Shell s’affichent et vous pouvez définir les valeurs comme vous le souhaitez.
  4. Une fois que vous avez terminé la configuration des paramètres et la création du package d’approvisionnement, vous pouvez appliquer le package à l’heure ou à l’exécution du déploiement de l’image. Pour plus d’informations, consultez Appliquer un package d’approvisionnement . Le processus d’application du package à une image Windows 10 Entreprise est le même.

Configurer le lanceur d’interpréteur de commandes

Il existe deux façons de configurer le lanceur d’interpréteur de commandes :

  1. Dans Windows 10 version 1803, vous pouvez configurer le lanceur Shell à l’aide du nœud ShellLauncher du fournisseur de services de configuration d’accès attribué (CSP). Pour plus d’informations, consultez AssignedAccess CSP . La configuration du lanceur d’interpréteur de commandes à l’aide de cette méthode active automatiquement Shell Launcher sur l’appareil, si l’appareil le prend en charge.
  2. Utilisez les fournisseurs WMI du lanceur d’interpréteur de commandes directement dans un script ou une application PowerShell.

Vous pouvez configurer les options suivantes pour le lanceur d’interpréteur de commandes :

  • Activez ou désactivez le lanceur d’interpréteur de commandes.
  • Spécifiez une configuration d’interpréteur de commandes pour un utilisateur ou un groupe spécifique.
  • Supprimez une configuration d’interpréteur de commandes pour un utilisateur ou un groupe spécifique.
  • Modifiez la configuration de l’interpréteur de commandes par défaut.
  • Obtenez des informations sur la configuration d’un interpréteur de commandes pour un utilisateur ou un groupe spécifique.

Les modifications n’entrent pas en vigueur tant qu’un utilisateur ne se connecte pas.

Lancer différents interpréteurs de commandes pour différents comptes d’utilisateur

Par défaut, shell Launcher exécute l’interpréteur de commandes par défaut, qui est spécifié lorsque vous créez l’image du système d’exploitation au moment de la conception. L’interpréteur de commandes par défaut est défini sur Cmd.exe, mais vous pouvez spécifier n’importe quel fichier exécutable comme interpréteur de commandes par défaut.

Vous pouvez configurer le lanceur d’interpréteur de commandes pour lancer un interpréteur de commandes différent pour des utilisateurs ou des groupes spécifiques si vous ne souhaitez pas exécuter l’interpréteur de commandes par défaut. Par exemple, vous pouvez configurer un appareil pour exécuter un interpréteur de commandes d’application personnalisé pour les comptes invités, mais exécuter l’interpréteur de commandes Windows Explorer standard pour les comptes d’administrateur afin de traiter l’appareil.

Si vous utilisez les fournisseurs WMI pour configurer le lanceur d’interpréteur de commandes pour un utilisateur ou un groupe au moment de l’exécution, vous devez utiliser l’identificateur de sécurité (SID) pour cet utilisateur ou groupe ; vous ne pouvez pas utiliser le nom d’utilisateur ou le nom de groupe.

Pour plus d’informations sur les identificateurs de sécurité courants, consultez SIDs connus.

Lorsque le compte connecté actuel appartient à deux groupes ou plus qui ont des configurations différentes définies pour chaque groupe, le lanceur d’interpréteur de commandes utilise la première configuration qu’il trouve. L’ordre de recherche n’étant pas défini, nous vous recommandons d’éviter d’affecter un utilisateur à plusieurs groupes avec différentes configurations de lanceur d’interpréteur de commandes.

Effectuer une action lorsque l’interpréteur de commandes se ferme

Lorsqu’un interpréteur de commandes personnalisé se ferme, le lanceur d’interpréteur de commandes peut effectuer l’une des quatre actions suivantes :

Action Description
0 Redémarrez l’interpréteur de commandes.
1 Redémarrez l’appareil.
2 Arrêtez l’appareil.
3 Ne rien faire.

Important

Assurez-vous que votre application shell ne se ferme pas automatiquement et n’est pas automatiquement fermée par des fonctionnalités telles que le filtre de boîte de dialogue, car cela peut entraîner un cycle infini de fermeture et de redémarrage, sauf si l’action de code de retour est définie pour ne rien faire.

Action de code de retour par défaut

Vous pouvez définir une action de code de retour par défaut pour le lanceur d’interpréteur de commandes avec le paramètre DefaultReturnCodeAction. Si vous ne modifiez pas la valeur initiale, l’action de code de retour par défaut est définie sur 0 (zéro), ce qui indique que le lanceur d’interpréteur de commandes redémarre l’interpréteur de commandes à la fermeture de l’interpréteur de commandes.

Mapper le code de sortie à une action de lanceur d’interpréteur de commandes

Le lanceur d’interpréteur de commandes peut effectuer une action spécifique en fonction du code de sortie retourné par l’interpréteur de commandes. Pour tout code de sortie donné retourné par l’interpréteur de commandes, vous pouvez configurer l’action du lanceur d’interpréteur de commandes en mappant ce code de sortie à l’une des actions de sortie de l’interpréteur de commandes.

Si le code de sortie ne correspond pas à une valeur définie, le lanceur d’interpréteur de commandes effectue l’action de code de retour par défaut.

Par exemple, votre interpréteur de commandes peut retourner des valeurs de code de sortie de -1, 0, 1 ou 255 selon la façon dont l’interpréteur de commandes se ferme. Vous pouvez configurer le lanceur d’interpréteur de commandes pour :

  • redémarrer l’appareil (1) lorsque l’interpréteur de commandes retourne un code de sortie de valeur -1
  • redémarrer l’interpréteur de commandes (0) quand l’interpréteur de commandes retourne un code de sortie de valeur 0
  • ne rien faire (3) lorsque l’interpréteur de commandes retourne un code de sortie de valeur 1
  • arrêter l’appareil (2) lorsque l’interpréteur de commandes retourne un code de sortie de valeur 255

Votre mappage d’action de code de retour personnalisé se présente comme suit :

Code de sortie Action
-1 1 (redémarrer l’appareil)
0 0 (redémarrer l’interpréteur de commandes)
1 3 (ne rien faire)
255 2 (arrêt de l’appareil)

Définir votre interpréteur de commandes personnalisé

Modifiez le script PowerShell suivant en fonction des besoins et exécutez le script sur l’appareil.

# Check if shell launcher license is enabled
function Check-ShellLauncherLicenseEnabled
{
    [string]$source = @"
using System;
using System.Runtime.InteropServices;

static class CheckShellLauncherLicense
{
    const int S_OK = 0;

    public static bool IsShellLauncherLicenseEnabled()
    {
        int enabled = 0;

        if (NativeMethods.SLGetWindowsInformationDWORD("EmbeddedFeature-ShellLauncher-Enabled", out enabled) != S_OK) {
            enabled = 0;
        }
        return (enabled != 0);
    }

    static class NativeMethods
    {
        [DllImport("Slc.dll")]
        internal static extern int SLGetWindowsInformationDWORD([MarshalAs(UnmanagedType.LPWStr)]string valueName, out int value);
    }

}
"@

    $type = Add-Type -TypeDefinition $source -PassThru

    return $type[0]::IsShellLauncherLicenseEnabled()
}

[bool]$result = $false

$result = Check-ShellLauncherLicenseEnabled
"`nShell Launcher license enabled is set to " + $result
if (-not($result))
{
    "`nThis device doesn't have required license to use Shell Launcher"
    exit
}

$COMPUTER = "localhost"
$NAMESPACE = "root\standardcimv2\embedded"

# Create a handle to the class instance so we can call the static methods.
try {
    $ShellLauncherClass = [wmiclass]"\\$COMPUTER\${NAMESPACE}:WESL_UserSetting"
    } catch [Exception] {
    write-host $_.Exception.Message; 
    write-host "Make sure Shell Launcher feature is enabled"
    exit
    }


# This well-known security identifier (SID) corresponds to the BUILTIN\Administrators group.

$Admins_SID = "S-1-5-32-544"

# Create a function to retrieve the SID for a user account on a machine.

function Get-UsernameSID($AccountName) {

    $NTUserObject = New-Object System.Security.Principal.NTAccount($AccountName)
    $NTUserSID = $NTUserObject.Translate([System.Security.Principal.SecurityIdentifier])

    return $NTUserSID.Value
}

# Get the SID for a user account named "Cashier". Rename "Cashier" to an existing account on your system to test this script.

$Cashier_SID = Get-UsernameSID("Cashier")

# Define actions to take when the shell program exits.

$restart_shell = 0
$restart_device = 1
$shutdown_device = 2
$do_nothing = 3

# Examples. You can change these examples to use the program that you want to use as the shell.

# This example sets the command prompt as the default shell, and restarts the device if the command prompt is closed. 

$ShellLauncherClass.SetDefaultShell("cmd.exe", $restart_device)

# Display the default shell to verify that it was added correctly.

$DefaultShellObject = $ShellLauncherClass.GetDefaultShell()

"`nDefault Shell is set to " + $DefaultShellObject.Shell + " and the default action is set to " + $DefaultShellObject.defaultaction

# Set Internet Explorer as the shell for "Cashier", and restart the machine if Internet Explorer is closed.

$ShellLauncherClass.SetCustomShell($Cashier_SID, "c:\program files\internet explorer\iexplore.exe www.microsoft.com", ($null), ($null), $restart_shell)

# Set Explorer as the shell for administrators.

$ShellLauncherClass.SetCustomShell($Admins_SID, "explorer.exe")

# View all the custom shells defined.

"`nCurrent settings for custom shells:"
Get-WmiObject -namespace $NAMESPACE -computer $COMPUTER -class WESL_UserSetting | Select Sid, Shell, DefaultAction

# Enable Shell Launcher

$ShellLauncherClass.SetEnabled($TRUE)

$IsShellLauncherEnabled = $ShellLauncherClass.IsEnabled()

"`nEnabled is set to " + $IsShellLauncherEnabled.Enabled

# Remove the new custom shells.

$ShellLauncherClass.RemoveCustomShell($Admins_SID)

$ShellLauncherClass.RemoveCustomShell($Cashier_SID)

# Disable Shell Launcher

$ShellLauncherClass.SetEnabled($FALSE)

$IsShellLauncherEnabled = $ShellLauncherClass.IsEnabled()

"`nEnabled is set to " + $IsShellLauncherEnabled.Enabled

Notes

Le script précédent inclut des exemples de plusieurs options de configuration, notamment la suppression d’un interpréteur de commandes personnalisé et la désactivation du lanceur d’interpréteur de commandes. Il n’est pas destiné à être exécuté tel qu’il est.

Droits utilisateur du lanceur d’interpréteur de commandes

Un interpréteur de commandes personnalisé est lancé avec le même niveau de droits utilisateur que le compte connecté. Cela signifie qu’un utilisateur disposant de droits d’administrateur peut effectuer n’importe quelle action système qui nécessite des droits d’administrateur, y compris le lancement d’autres applications avec des droits d’administrateur, alors qu’un utilisateur sans droits d’administrateur ne peut pas le faire.

Avertissement

Si votre application shell nécessite des droits d’administrateur et doit être élevée, et que le contrôle de compte d’utilisateur (UAC) est présent sur votre appareil, vous devez désactiver le contrôle d’utilisateur pour que le lanceur d’interpréteur de commandes lance l’application shell.