Lanceur d’interpréteur de commandes
À l’aide du lanceur d’interpréteur de commandes, vous pouvez configurer un appareil kiosque 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 le lanceur d’interpréteur de commandes pour lancer différentes applications shell pour différents utilisateurs ou groupes d’utilisateurs.
Il existe quelques exceptions aux applications et exécutables que vous pouvez utiliser comme 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 d’interpréteur de commandes. Le Lanceur Shell lance une shell personnalisée et supervise le processus d'identification lorsque la shell personnalisée se ferme. Write.exe crée un processus 32 bits wordpad.exe et se ferme. Étant donné que le lanceur d’interpréteur de commandes ne connaît pas le processus de wordpad.exe nouvellement créé, le lanceur d’interpréteur de commandes effectue une action basée sur le 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 qui est ajoutée via la fonction SetConsoleCtrlHandler dans une application console.
Remarque
Vous ne pouvez pas configurer à la fois le lanceur d’interpréteur de commandes et l’accès affecté sur le même système.
Utilisez Le lanceur d’interpréteur de commandes V2. Vous pouvez spécifier une application Windows universelle comme interpréteur de commandes personnalisé. Cochez 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 d’interpréteur de commandes, comme stratégie de groupe, AppLocker et Mobile Gestion des appareils
Remarque
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 le lanceur d’interpréteur de commandes v1 et le lanceur d’interpréteur de commandes v2
Shell Launcher v1 remplace , l’interpréteur de commandes explorer.exe
par défaut, par eshell.exe
, qui peut lancer une application de bureau Windows.
Le lanceur d’interpréteur de commandes v2 remplace explorer.exe
customshellhost.exe
par . 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 exécuter sur plusieurs moniteurs.
- L’application shell 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.
Conditions préalables
Windows 10 Entreprise ou Windows 10 Éducation.
Terminology
- Activez, activez : Pour rendre le paramètre disponible pour l’appareil et éventuellement appliquer 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é est appelée Lanceur d’interpréteur de commandes incorporé dans Windows 10, version 1511.
- Lanceur d’interpréteur de commandes personnalisé : Cette fonctionnalité est appelée lanceur d’interpréteur de commandes 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. Il doit être activé avant la configuration. Vous pouvez activer et configurer le lanceur d’interpréteur de commandes dans une image de Windows 10 personnalisée (.wim) si Microsoft Windows n’a pas été installé. Si Windows a déjà été installé, vous devez activer le lanceur d’interpréteur de commandes avant d’appliquer un package d’approvisionnement pour configurer le lanceur d’interpréteur de commandes.
Activer le lanceur d’interpréteur de commandes à l’aide de Panneau de configuration
- 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.
- Dans la fenêtre Programmes et fonctionnalités , sélectionnez Activer ou désactiver les fonctionnalités Windows.
- 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.
- 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. Lorsque vous avez terminé, la fenêtre indique que les modifications demandées sont terminées.
- Sélectionnez Fermer pour fermer la fenêtre Fonctionnalités Windows .
Remarque
L’activation du lanceur d’interpréteur de commandes ne nécessite pas de redémarrage de l’appareil.
Activer le lanceur d’interpréteur de commandes en appelant WESL_UserSetting
- Activez ou désactivez le lanceur d’interpréteur de commandes en appelant la fonction WESL_UserSetting.SetEnabled dans la classe WMI (Windows Management Instrumentation) WESL_UserSetting.
- 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, voir What Is Deployment Image Servicing and Management.
Activer le lanceur d’interpréteur de commandes à l’aide de DISM
Ouvrez une invite de commandes avec des privilèges d’administrateur.
Copiez install.wim dans un dossier temporaire sur le disque dur (dans les étapes suivantes, nous supposons qu’il s’appelle C :\wim).
Créez un répertoire.
md c:\wim
Montez l’image système.
dism /mount-wim /wimfile:c:\bootmedia\sources\install.wim /index:1 /MountDir:c:\wim
Activez la fonctionnalité.
dism /image:c:\wim /enable-feature /all /featureName:Client-EmbeddedShellLauncher
Validez la modification.
dism /unmount-wim /MountDir:c:\wim /Commit
Activer le lanceur d’interpréteur de commandes à l’aide du 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 d’interpréteur de commandes en créant un package d’approvisionnement à l’aide de l’Designer de configuration Windows, puis en appliquant le package d’approvisionnement pendant le déploiement de l’image ou l’exécution. 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.
Procédez comme suit pour créer un package d’approvisionnement qui contient les paramètres ShellLauncher.
- Créez un package d’approvisionnement dans configuration Windows Designer en suivant les instructions fournies dans Créer un package d’approvisionnement pour Windows 10.
- Dans la page Personnalisations disponibles, sélectionnez Paramètres> d’exécutionSMISettings>ShellLauncher.
- Définissez la valeur d’Activer sur ENABLE. D’autres options de configuration du lanceur d’interpréteur de commandes s’affichent, et vous pouvez définir les valeurs comme vous le souhaitez.
- Une fois que vous avez terminé de configurer les paramètres et de créer le package d’approvisionnement, vous pouvez appliquer le package à l’heure de déploiement ou à l’exécution 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 :
- Dans Windows 10 version 1803, vous pouvez configurer le lanceur d’interpréteur de commandes à l’aide du nœud ShellLauncher du fournisseur de services de configuration d’accès affecté (CSP). Pour plus d’informations, consultez AssignedAccess CSP . La configuration du lanceur d’interpréteur de commandes à l’aide de cette méthode active également automatiquement le lanceur d’interpréteur de commandes sur l’appareil, si l’appareil le prend en charge.
- 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 :
- Activer ou désactiver 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 une configuration d’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, le lanceur d’interpréteur de commandes 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 du design. 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 autre interpréteur de commandes 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 fermée automatiquement par des fonctionnalités telles que 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 sortie 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 basée sur le 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) lorsque 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êter l’appareil) |
Définir votre interpréteur de commandes personnalisé
Modifiez le script PowerShell suivant le cas et exécutez-le 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
Remarque
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 shell personnalisé est lancé avec le même niveau de droits d’utilisateur que le compte qui est connecté. Cela signifie qu’un utilisateur disposant de droits d’administrateur peut effectuer toute action système qui nécessite des droits d’administrateur, notamment le lancement d’autres applications avec des droits d’administrateur, contrairement à un utilisateur sans droits d’administrateur.
Warning
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 de compte d’utilisateur pour que le lanceur d’interpréteur de commandes lance l’application shell.
Articles connexes
- Démarrage sans marque
- Ouverture de session personnalisée
- Utiliser le lanceur d’interpréteur de commandes pour créer un kiosque Windows 10
- Lancer différents interpréteurs de commandes pour différents comptes d’utilisateur
- Effectuer une action lorsque l’interpréteur de commandes se ferme
- Droits utilisateur du lanceur d’interpréteur de commandes