Comment rendre le mappage SUBST persistant après les redémarrages?

177

Windows (XP ou version ultérieure) dispose-t-il d’un moyen intégré pour créer des mappages de lecteur persistants, comme ceux créés par SUBST? J'ai trouvé un outil tiers psubst . Y a-t-il un moyen de le faire sans outils tiers?

meule
la source
C'est possible, car psubstc'est juste un fichier .bat qui se mêle au registre. Voir la réponse de @ davr ci-dessous pour plus de détails.
Scott Stafford le
Avertissement de l'article Wikipedia dans la réponse acceptée: " À partir de Windows Vista, les fichiers supprimés sont immédiatement supprimés de manière définitive et ne sont pas déplacés vers la" Corbeille ". Avant Windows Vista (sous Windows XP, par exemple), les fichiers substitués" les disques "ont été déplacés vers la Corbeille lors de leur suppression. "
JMD
1
@IvoFlipse, c'est une bonne hypothèse en général, mais dans ce cas, c'est tout simplement faux. L'outil «tiers» est un fichier de commandes de 150 lignes qui fournit une belle interface de travail pour modifier un registre et nettoyer les entrées afin de se conformer aux règles de substfin de barre oblique, mais il ne s'agit que d'un joli wrapper . Vous pouvez le faire sans programme, et le fichier README pour psubstexpliquer comment. Ou, voir la réponse de davr ci-dessous où il cite le psubst README.
alexanderbird
J'ai ajouté une réponse qui résout le problème de la corbeille
Tony Pulokas

Réponses:

153

Bien Wikipedia mentionne :

C:\>SUBST /?
Associates a path with a drive letter.

SUBST [drive1: [drive2:]path]
SUBST drive1: /D

  drive1:        Specifies a virtual drive to which you want to assign a path.
  [drive2:]path  Specifies a physical drive and path you want to assign to
                 a virtual drive.
  /D             Deletes a substituted (virtual) drive.

Type SUBST with no parameters to display a list of current virtual drives.

Ainsi, vous pouvez associer des chemins avec des lettres de lecteur en utilisant subst. Le logiciel de commande Persistent SUBST (psubst) semble extrêmement utile et fournit une solution pour l’exécuter à partir du démarrage:

https://code.google.com/p/psubst/#Inconstancy

Inconstance

Cependant, le redémarrage d'un système détruit un disque virtuel. Que faire? Un disque peut être créé après le démarrage. Mais que faire quand un disque est nécessaire pour les premières étapes d’une startup? Par exemple, pour exécuter des services? Il existe une fonctionnalité système permettant de démarrer un disque virtuel à partir du registre du système:

REGEDIT4 

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\DOS Devices] 
"Z:"="\\??\\C:\\Documents and Settings\\All Users\\Shared Documents"

Il suffit de créer un fichier texte avec l'extension .REGet de l'exécuter. Lors du prochain démarrage d’un système, le disque virtuel existera à la connexion. Il doit définir un nom de disque et un chemin. Notez que chaque barre oblique inversée dans le chemin est doublée.

Sous Windows, vous pouvez exécuter l'éditeur de registre comme suit:

  1. Démarrer »Exécuter ... (ou appuyez sur Win+ R)
  2. Type: regedit
  3. Sous Windows Vista et supérieur, le contrôle de compte d'utilisateur s'affiche, cliquez sur "Oui" .
Ivo Flipse
la source
6
C'est bon à savoir, même si je n'en utilise substplus. Mais à l'époque où je le faisais, j'avais simplement un fichier de commandes dans mon dossier Démarrage qui faisait ces choses-là.
Joey
2
C'est génial. (Cela nécessite un redémarrage, FYI.) Notre arborescence source doit partir d’une lettre de lecteur spécifique pour que nos PDB s’alignent toujours sur des ordinateurs différents. Ce paramètre de registre résout un désagrément que j'ai depuis des années avec un disque secondaire qui n'est pas présent avec les runas, ce qui est très désagréable si vous devez (rarement) exécuter Visual Studio sous un compte administrateur.
Brian Reiter
3
Joey: Cette solution ne semble pas fonctionner sous Windows 7. Lorsque vous exécutez une application avec des privilèges d'administrateur, le lecteur substitué n'est pas visible par l'application.
Dave Jarvis
31
Merci pour la solution. Pour votre information, si vous tapez la variable dans RegEdit de manière interactive, ne doublez pas les barres obliques inverses. En d’autres termes, créez une nouvelle variable de chaîne nommée "Z:" (sans les guillemets) et définissez la valeur sur la chaîne indiquée ci-dessus, à l’exception de simples barres obliques inverses.
Crispy
3
@ Devil'sAdvocate \??est un répertoire virtuel dans l'espace de noms du gestionnaire d'objets NT. Il vérifie d'abord les périphériques DOS de la session d'ouverture de session (en réalité, les périphériques DOS sont des liens symboliques vers des périphériques NT, généralement situés dans \Device), puis les \Global??périphériques DOS. Dans WinObj, vous trouverez les périphériques de session d’ouverture de session au format \Sessions\0\DosDevices\[logon ID]. Notez que les périphériques de session d'ouverture de session sont tous suivis dans la session 0 (services) pour chaque ID de connexion LSA. Ils ne sont pas en corrélation avec les sessions de bureau. C'est pourquoi, si vous mappez un lecteur en tant qu'administrateur limité, il n'existe pas lorsqu'il est surélevé. c'est une ouverture de session différente.
Eryk dim.
76

L'installer à HKEY_CURRENT_USERa l'avantage d'avoir différentes configurations pour chaque utilisateur. Je préfère coller la configuration de l'espace utilisateur tant qu'un service système ne dépend pas du périphérique.

REGEDIT4
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run]
"F Drive"="subst F: D:\\mount\\db"
"G Drive"="subst G: D:\\mount\\log"

Source: http://networkadminkb.com/KB/a446/how-to-use-drive-letters-mount-points-the-same-disk-drive.aspx

166_MMX
la source
7
+1 Pour montrer comment faire plusieurs correspondances dans un seul fichier reg. :-)
megaflop
4
+1 pour la facilité de ceci & explique également pourquoi HKEY_CURRENT_USER. :)
mec de CAD
1
+1 pour avoir montré une manière très élégante de le faire automatiquement sans lot dans le dossier de démarrage
dkellner
3
Peut aussi faire de la ligne de commande (depuis XP / Windows Serveur 2000): reg add HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run /v "F Drive" /d "subst F: D:\x\db" NB \ ne doit échapper ici si elle est le dernier caractère de la commande subst, par exemple lorsque la cible est le répertoire racine: "subst F: D:\\"; un seul \ il serait interprété comme échappant à la "suite".
stevek_mcc
45

Il y a une réponse dans la page que vous avez liée. Vous n'avez pas besoin de l'outil tiers, vous pouvez le faire avec une simple entrée de registre, comme indiqué sur cette page.

Créez un fichier texte nommé 'mapdrive.reg' avec le contenu suivant:

REGEDIT4 

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\DOS Devices] 
"Z:"="\\??\\C:\\Documents and Settings\\All Users\\Shared Documents" 

Ensuite, vous devriez pouvoir double-cliquer dessus pour le configurer, sans outils tiers.

davr
la source
8
L'avantage de la clé de registre par rapport au fichier de commandes est qu'elle définit le lecteur de substitution avant que toute autre commande de démarrage ne soit exécutée, au cas où certains d'entre eux
auraient
6
@ Ivo: J'appellerais cela une peur saine de l'inconnu;)
Isxek Le
9
Si vous le faites dans regedit, veillez à utiliser des barres obliques inverses simples. Par exemple, \ ?? \ C: \ Some \ Directory
Droj
27

J'ai trouvé cela parce que je cherchais une amélioration par rapport à mes scripts de démarrage. Ils fonctionnaient correctement, mais ils s'exécutaient parfois après le blocage des dossiers au démarrage, car mon lecteur n'était pas encore mappé.

Tout d'abord, j'ai modifié le registre, mais je n'ai pas réussi à le faire fonctionner. Cependant, je suis tombé sur cette alternative qui, bien qu’elle n’utilise pas subst, répond à ma question: "Comment rendre le mappage SUBST persistant lors des redémarrages?" N'utilisez pas de sous-programme ... (insérez les noms 'computerName' et 'pathName' appropriés):

utilisation nette u: "\\ nom_ordinateur \ c $ \ cheminName" / persistent: oui

J'ai adapté cela de la suggestion de Hank Arnold lors de cette discussion sur la cartographie des lecteurs locaux . J'avais deviné que \\ myComputerName \ c pourrait fonctionner, mais je ne savais pas appliquer le $.

Avant d’essayer la commande "net use", essayez d’accéder à

\\ computerName \ c $
pour vous assurer que 'computerName' est correct.

sauge
la source
2
Excellente solution, avec toutefois deux problèmes: 1) elle n'est pas visible par le système de fichiers local, 2) des autorisations ...
ashes999
6
si vous l'utilisez, \\localhost\c$\path\to\thingil est portable sur plusieurs ordinateurs (ou des mises à niveau qui modifient le nom de l'ordinateur). L’inconvénient de l’utilisation d’un lecteur mappé sur Win7 + réside dans le fait que des stratégies de sécurité différentes s’appliquent aux lecteurs réseau par rapport aux lecteurs locaux et que certains programmes refuseront simplement de s’exécuter à partir d’un lecteur mappé.
Matt Wilkie
1
Il est visible pour le système de fichiers et pour le système de fichiers local. Il est marqué en tant que lecteur réseau, tout comme certains lecteurs sont marqués en tant que lecteurs amovibles. Cela ne signifie pas que ces lecteurs ne font pas partie du système de fichiers local, ou ne sont pas visibles de celui-ci, mais bien des lecteurs réseau / amovibles dans le système de fichiers local.
user165568
1
Lors des tests, je l'ai fait pour un problème de performances (il y a quelques années maintenant). L'utilisation du lecteur réseau monté (localement) est également plus lente que l'utilisation directe du système de fichiers (ou du poste secondaire, etc.). Ce n'est pas une différence énorme pour les petits fichiers ou une utilisation occasionnelle - ce n'est pas comme si vous passiez du réseau réel à un autre "serveur" - mais c'est important.
HerbM
8

Déposez un fichier de commandes dans votre dossier de démarrage contenant toutes les SUBST que vous souhaitez effectuer.

EBGreen
la source
5

Étant donné que PSubst original présente certaines limitations et semble être conclu par l'auteur, j'ai dû coder une nouvelle version pour mes besoins, en corrigeant certains problèmes et en ajoutant des fonctionnalités et de la flexibilité.

Vérifiez ici le fichier de commandes PSubst version 3

https://github.com/cyberponk/psubst

Compatible avec Windows 7, Windows 8, Windows 10, Windows Server 2012

Remarque: cet ouvrage n'a pas l'intention de démériter l'auteur original et n'a vu le jour que par nécessité réelle, comme suit:

  • En tant qu’administrateur newtork, j’ai constamment besoin de lecteurs de réseau SUBST et de bricoler avec différents utilisateurs du réseau.

  • Comme tout le monde n’est pas un expert de Windows, j’ai pensé que l’élévation automatique de l’administration avec la gestion des erreurs aiderait, sur la base des commentaires que j'ai lus sur le Web.

  • Comme certaines personnes ont eu du mal avec l'ordre des arguments, j'ai pensé qu'il serait préférable que le script fonctionne avec des arguments dans n'importe quel ordre.

Je ne me souviens pas de chaque fonctionnalité ajoutée, mais chaque inclusion a été réalisée par nécessité. Je partage le code afin que les autres ne rencontrent pas les problèmes que j'ai rencontrés. Par cela, il n'y a pas d'autre intention que de partager et d'aider.

cyberponk
la source
S'il vous plaît, en disant "A" dites "B". Vous pensez que le psubst original a beaucoup de problèmes - veuillez indiquer s'il en est. D'autre part, psubst n'est pas abandonné. Il vient d'atteindre la limite de son développement. L'outil d'origine suit une philosophie très simple: faire quelque chose et bien faire. Il n'est pas surchargé de fonctionnalités supplémentaires telles que la gestion avec le contrôle de compte d'utilisateur et la création de code vbs supplémentaire pour effectuer davantage. Une chose peut être faite par rapport au code d'origine - quelques modifications esthétiques pour simplifier le code et améliorer la lisibilité.
Jsxt
Editted, s'il vous plaît examiner. UAC et vbs sont pour l'élévation automatique de l'administrateur. Je ne suis pas d'accord sur le commentaire "limite de développement", car tous les changements que j'ai apportés visaient à rendre l'utilisation encore plus simple et facile après avoir rencontré plusieurs problèmes avec PSUBST. Je n'ai pas l'intention de critiquer l'auteur original, je ne vais donc pas énumérer les problèmes, mais j'ai plutôt créé des solutions. En fait, j'ai proposé d'ajouter mes éditions dans la branche d'origine de github, mais cela a été refusé et j'ai donc dû créer ma propre branche.
cyberponk
Merci pour vos commentaires rapides et détaillés. J'ai probablement besoin d'examiner de plus près votre développement.
jsxt
Je vous tire mon chapeau. J'ai passé mon temps dans les tranchées de script batch, et je sais à quel point c'est douloureux. Ce code semble assez bon.
SilverbackNet
2

Je développe la réponse de davr parce que tous les fichiers qui sont supprimés du lecteur mappé sont définitivement supprimés au lieu d'aller dans la corbeille. Ce fichier REG est basé sur les informations compilées à partir de cet article TechNet , qui explique comment activer la corbeille. L'exemple mappe le lecteur Q virtuel sur le dossier "OneDrive - Test" et active la corbeille sur le lecteur Q. Modifiez les chemins et le nom en fonction de votre situation.

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\DOS Devices]
"Q:"="\\??\\C:\\Users\\Tony\\OneDrive - Test"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FolderDescriptions\{9147E464-33A6-48E2-A3C9-361EFD417DEF}]
"RelativePath"="Q:\\"
"Category"=dword:00000004
"Name"="Q_Mapped_OneDrive"

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\BitBucket\KnownFolder\{9147E464-33A6-48E2-A3C9-361EFD417DEF}]
"MaxCapacity"=dword:0000c7eb
"NukeOnDelete"=dword:00000000

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Explorer\FolderDescriptions\{9147E464-33A6-48E2-A3C9-361EFD417DEF}]
"RelativePath"="Q:\\"
"Category"=dword:00000004
"Name"="Q_Mapped_OneDrive"

[HKEY_CURRENT_USER\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Explorer\BitBucket\KnownFolder\{9147E464-33A6-48E2-A3C9-361EFD417DEF}]
"MaxCapacity"=dword:0000c7eb
"NukeOnDelete"=dword:00000000

Si vous ne disposez que d'un seul lecteur mappé, vous pouvez vous en sortir avec le GUID {9147E464-33A6-48E2-A3C9-361EFD417DEF}. Si vous avez plusieurs lecteurs mappés, chacun doit correspondre à un GUID de votre générateur de GUID préféré.

Tony Pulokas
la source
Certaines de mes observations: si vous définissez simplement les valeurs sous HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FolderDescriptions\{GUID}et redémarrez, les valeurs correspondantes sous HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\BitBucket\KnownFolder\{GUID}sont générées automatiquement par Windows. Rien ne m'est apparu sous les Wow6432Nodeclés, mais la corbeille a fonctionné sans elles. C'était sur un système Windows 7, donc je ne suis pas sûr que cela se comporte différemment sur les versions plus récentes.
Herohtar
1
Juste pour ajouter un peu de données, je dispose d’un système Windows 10 64 bits et j’ai testé ce qui s’est passé lors de la suppression d’une application 32 bits (FastStone Image Viewer) et j’ai constaté que la corbeille ne fonctionnait pas correctement. -bits sans les clés Wow6432Node.
Tony Pulokas