58 votes

Comment changer l'option "Ouvrir avec Powershell" en "Ouvrir avec l'invite de commande" lorsque l'on clique sur le bouton droit de la souris dans l'Explorateur ?

Si vous cliquez sur un endroit vide dans l'Explorateur avec la touche Shift et le bouton droit de la souris, vous verrez apparaître les éléments suivants "Ouvrir avec PowerShell" au lieu de "Ouvrir avec l'invite de commande" depuis le Mise à jour pour les créateurs (2017-04). Comment faire pour retrouver l'ancien comportement où il est affiché. "Ouvrir avec l'invite de commande" ?

J'ai essayé de changer le paramètre "Afficher PowerShell au lieu de Command Prompt lors d'un clic droit sur le menu Démarrer ou en appuyant sur Windows + X". sur off, mais cela n'a pas changé le menu shift+clic droit.

63voto

magicandre1981 Points 94338

Ouvrez regedit.exe, allez à HKEY_CLASSES_ROOT\Directory\shell\cmd , s'approprier la clé ajoutez les permissions complètes de votre compte d'utilisateur et changez le nom du DWORD de HideBasedOnVelocityId a ShowBasedOnVelocityId a activez à nouveau l'entrée de l'invite de commande .

Enter image description here

Ou appliquer Modification d'Andrew Richards pour avoir les deux affichés (cmd et PowerShell, avec également une entrée pour avoir la version elevate (running as admin)),

Enter image description here

Enter image description here

en important son fichier .reg (créez un nouveau fichier txt, collez le contenu et renommez l'extension du fichier en reg) :

Windows Registry Editor Version 5.00

; Command Prompt

[HKEY_CLASSES_ROOT\Directory\shell\01MenuCmd]
"MUIVerb"="Command Prompts"
"Icon"="cmd.exe"
"ExtendedSubCommandsKey"="Directory\\ContextMenus\\MenuCmd"

[HKEY_CLASSES_ROOT\Directory\background\shell\01MenuCmd]
"MUIVerb"="Command Prompts"
"Icon"="cmd.exe"
"ExtendedSubCommandsKey"="Directory\\ContextMenus\\MenuCmd"

[HKEY_CLASSES_ROOT\Directory\ContextMenus\MenuCmd\shell\open]
"MUIVerb"="Command Prompt"
"Icon"="cmd.exe"

[HKEY_CLASSES_ROOT\Directory\ContextMenus\MenuCmd\shell\open\command]
@="cmd.exe /s /k pushd \"%V\""

[HKEY_CLASSES_ROOT\Directory\ContextMenus\MenuCmd\shell\runas]
"MUIVerb"="Command Prompt Elevated"
"Icon"="cmd.exe"
"HasLUAShield"=""

[HKEY_CLASSES_ROOT\Directory\ContextMenus\MenuCmd\shell\runas\command]
@="cmd.exe /s /k pushd \"%V\""

; PowerShell

[HKEY_CLASSES_ROOT\Directory\shell\02MenuPowerShell]
"MUIVerb"="PowerShell Prompts"
"Icon"="powershell.exe"
"ExtendedSubCommandsKey"="Directory\\ContextMenus\\MenuPowerShell"

[HKEY_CLASSES_ROOT\Directory\background\shell\02MenuPowerShell]
"MUIVerb"="PowerShell Prompts"
"Icon"="powershell.exe"
"ExtendedSubCommandsKey"="Directory\\ContextMenus\\MenuPowerShell"

[HKEY_CLASSES_ROOT\Directory\ContextMenus\MenuPowerShell\shell\open]
"MUIVerb"="PowerShell"
"Icon"="powershell.exe"

[HKEY_CLASSES_ROOT\Directory\ContextMenus\MenuPowerShell\shell\open\command]
@="powershell.exe -noexit -command Set-Location '%V'"

[HKEY_CLASSES_ROOT\Directory\ContextMenus\MenuPowerShell\shell\runas]
"MUIVerb"="PowerShell Elevated"
"Icon"="powershell.exe"
"HasLUAShield"=""

[HKEY_CLASSES_ROOT\Directory\ContextMenus\MenuPowerShell\shell\runas\command]
@="powershell.exe -noexit -command Set-Location '%V'"

; Ensure OS Entries are on the Extended Menu (Shift-Right Click)

[HKEY_CLASSES_ROOT\Directory\shell\cmd]
"Extended"=""

[HKEY_CLASSES_ROOT\Directory\background\shell\cmd]
"Extended"=""

[HKEY_CLASSES_ROOT\Directory\shell\Powershell]
"Extended"=""

[HKEY_CLASSES_ROOT\Directory\background\shell\Powershell]
"Extended"=""

27voto

der Points 11

Comme alternative rapide aux autres réponses, vous pouvez taper cmd sur la barre d'adresse de l'Explorer pour ouvrir une invite de commande cd d dans le répertoire courant. (Si vous préférez le clavier, vous pouvez utiliser la commande Ctrl + L pour faire apparaître la barre d'adresse, puis tapez cmd .)

Cela fonctionne pour powershell aussi.

Edit (2021-08-02) : Comme @pj.dewitte l'a fait remarquer, il se peut que vous deviez utiliser la fonction .exe (c'est-à-dire cmd.exe , powershell.exe ).

6voto

Johan Leino Points 2533

C'est extrêmement facile à réaliser

  • En el Propriétés de la barre des tâches et du menu Démarrer allez dans l'onglet Navigation et décochez l'option Remplacer l'Invite de commande par Windows PowerShell option.
  • Cliquez sur Appliquer pour que la modification prenne effet.

enter image description here

Sources :

enter image description here

Source supplémentaire :

3voto

Leeroy Points 131

Pour résumer toutes les recherches et améliorer Andrew Richards j'ai pu me débarrasser des sous-menus ennuyeux en utilisant un seul et même menu. runas pour l'invite de commande traditionnelle et la mise en œuvre d'une entrée élevée pour PowerShell à l'aide de Start-Process de l'instance non élevée appelée par cmd.exe :

[HKEY_CLASSES_ROOT\Directory\Background\shell\ps_uac_usr\command]
@="cmd /C powershell \"start powershell -a '-noexit -command Set-Location ''%V''' -v RunAs\""
  • v Le drapeau indique Verbe réglé sur RunAs déclenche l'élévation via l'invite UAC ;

  • a signifie ArgumentList qui passe noexit option qui empêche la fermeture de la nouvelle fenêtre PS au démarrage et Set-Location est explicite ;

  • %V transmet le chemin initial pour la nouvelle invite de commande (lorsque le(s) fichier(s)/dossier(s) est(sont) sélectionné(s), il transmet l'emplacement de l'élément sur lequel le clic droit a été effectué, si rien n'est sélectionné, il est égal au répertoire de travail) ;

  • note, \ l'échappement des guillemets doubles dicté par la syntaxe du fichier reg en tant que ligne doit être considéré comme @="<command>" donde <command> est ce qui se retrouve réellement dans les données de valeur de clé ;

  • et la partie la plus critique est utilisation correcte de ' Il est nécessaire de spécifier que la première instance de PowerShell ne doit pas du tout analyser le contenu des citations et transmettre les arguments de manière littérale tout en préservant l'ensemble des éléments suivants ' pour que PowerShell final soit capable d'ignorer tout rogue & ( %V La variable est développée par explorer.exe avant toute exécution, donc nous n'avons pas à nous en soucier).

Rien de nouveau, mais c'est logique puisque cette implémentation préserve la compatibilité ascendante. Legacy cmd démarrera même si l'exécutable PowerShell n'existe pas.
Combinaison de runas clé de registre placée directement dans shell est ce qui accorde les permissions. Et puisqu'il ne peut y avoir qu'une seule clé de ce type dans un système unique shell d'où la limitation qui a forcé Andrew à utiliser non seulement des sous-menus, mais à les rendre distincts pour CMD/PS au lieu d'un seul sous-menu.
En utilisant une racine unique runas clé pour l'élévation cmd.exe explicitement et en créant d'autres entrées avec PowerShell, il est possible d'éviter les sous-menus ennuyeux.

Donc, ma coutume .reg ressemble à ceci :

Windows Registry Editor Version 5.00

; CMD

[HKEY_CLASSES_ROOT\Directory\Background\shell\q_cmd_usr]
@="@shell32.dll,-8506"
"Extended"=""
"Icon"="cmd.exe"

[HKEY_CLASSES_ROOT\Directory\Background\shell\q_cmd_usr\command]
@="cmd.exe /s /k pushd \"%V\""

[HKEY_CLASSES_ROOT\Directory\shell\q_cmd_usr]
@="@shell32.dll,-8506"
"Extended"=""
"Icon"="cmd.exe"

[HKEY_CLASSES_ROOT\Directory\shell\q_cmd_usr\command]
@="cmd.exe /s /k pushd \"%V\""

[HKEY_CLASSES_ROOT\Drive\shell\q_cmd_usr]
@="@shell32.dll,-8506"
"Extended"=""
"Icon"="cmd.exe"

[HKEY_CLASSES_ROOT\Drive\shell\q_cmd_usr\command]
@="cmd.exe /s /k pushd \"%V\""

; CMD (Elevated)

[HKEY_CLASSES_ROOT\Directory\Background\shell\runas]
@="@shell32.dll,-8506"
;"Extended"=""
"Icon"="cmd.exe"
"HasLUAShield"=""

[HKEY_CLASSES_ROOT\Directory\Background\shell\runas\command]
@="cmd.exe /s /k pushd \"%V\""

[HKEY_CLASSES_ROOT\Directory\shell\runas]
@="@shell32.dll,-8506"
"Extended"=""
"Icon"="cmd.exe"
"HasLUAShield"=""

[HKEY_CLASSES_ROOT\Directory\shell\runas\command]
@="cmd.exe /s /k pushd \"%V\""

[HKEY_CLASSES_ROOT\Drive\shell\runas]
@="@shell32.dll,-8506"
"Extended"=""
"Icon"="cmd.exe"
"HasLUAShield"=""

[HKEY_CLASSES_ROOT\Drive\shell\runas\command]
@="cmd.exe /s /k pushd \"%V\""

; PS (Elevated)

[HKEY_CLASSES_ROOT\Directory\Background\shell\ps_uac_usr]
@="@shell32.dll,-8508"
"Extended"=""
"Icon"="powershell.exe"
"HasLUAShield"=""

[HKEY_CLASSES_ROOT\Directory\Background\shell\ps_uac_usr\command]
@="cmd /C powershell \"start powershell -a '-noexit -command Set-Location ''%V''' -v RunAs\""

[HKEY_CLASSES_ROOT\Directory\shell\ps_uac_usr]
@="@shell32.dll,-8508"
"Extended"=""
"Icon"="powershell.exe"
"HasLUAShield"=""

[HKEY_CLASSES_ROOT\Directory\shell\ps_uac_usr\command]
@="cmd /C powershell \"start powershell -a '-noexit -command Set-Location ''%V''' -v RunAs\""

[HKEY_CLASSES_ROOT\Drive\shell\ps_uac_usr]
@="@shell32.dll,-8508"
"Extended"=""
"Icon"="powershell.exe"
"HasLUAShield"=""

[HKEY_CLASSES_ROOT\Drive\shell\ps_uac_usr\command]
@="cmd /C powershell \"start powershell -a '-noexit -command Set-Location ''%V''' -v RunAs\""

Si possible, pour éviter de modifier le comportement des entrées existantes, il est beaucoup moins désordonné de créer simplement ses propres entrées au lieu de prendre possession des entrées du système dans le registre. Cela devrait expliquer pourquoi j'ai réutilisé l'entrée par défaut qui n'a pas d'icône et pourquoi la seule différence entre les entrées d'invite élevées est une petite icône de bouclier. Au lieu de câbler les légendes de texte à une langue spécifique, des lignes comme @="@shell32.dll,-8506" permettent aux entrées de rester localisées.

Utilisation de ; de commenter/ Décommenter "Extended"="" ligne permettre de dégager/ cacher respectivement le menu de clic droit par défaut de ce formulaire d'entrée. Le menu caché est toujours accessible par Shift + Right Click . Dans mon fichier de registre, l'entrée pour l'élévation de cmd est affichée par défaut, le reste est caché derrière Shift+RMB.

Directory\shell Le chemin d'accès correspond à un clic droit sur n'importe quel dossier,
Drive\shell aux lecteurs du système,
Directory\Background\shell à la zone d'arrière-plan du répertoire de travail dans la fenêtre de l'explorateur.

D'après mes observations, les entrées du menu contextuel du clic droit sont triées par ordre alphanumérique, comme elles sont lues dans le registre. Cela devrait expliquer les noms des clés dans mon fichier reg, à part qu'ils ont intérêt à être assez uniques pour ne pas entrer en collision avec quoi que ce soit.

2voto

Chris Nava Points 4048

Pour trouver tous les endroits où Windows a modifié cela, vous pouvez utiliser le fichier de registre suivant après prise en charge de la propriété de chaque clé en question.

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Directory\background\shell\cmd]
"ShowBasedOnVelocityId"=dword:00639bc8
"HideBasedOnVelocityId"=-

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Directory\background\shell\Powershell]
"HideBasedOnVelocityId"=dword:00639bc8
"ShowBasedOnVelocityId"=-

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Directory\shell\cmd]
"ShowBasedOnVelocityId"=dword:00639bc8
"HideBasedOnVelocityId"=-

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Directory\shell\Powershell]
"HideBasedOnVelocityId"=dword:00639bc8
"ShowBasedOnVelocityId"=-

[HKEY_CLASSES_ROOT\Drive\shell\cmd]
"ShowBasedOnVelocityId"=dword:00639bc8
"HideBasedOnVelocityId"=-

[HKEY_CLASSES_ROOT\Drive\shell\Powershell]
"HideBasedOnVelocityId"=dword:00639bc8
"ShowBasedOnVelocityId"=-

Je voudrais juste m'approprier le [HKCR\Directory] y [HKCR\Drive] de façon récursive et de forcer l'héritage des permissions.

Registry Permissions and Ownership setting

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X