Wie kann die SUBST-Zuordnung über Neustarts hinweg persistent gemacht werden?

177

Verfügt Windows (XP oder höher) über eine integrierte Methode zum Erstellen permanenter Laufwerkszuordnungen, wie sie SUBST erstellt? Ich habe ein Drittanbieter-Tool psubst gefunden . Gibt es eine Möglichkeit, dies ohne Tools von Drittanbietern zu tun?

Rick
quelle
Es ist möglich, weil psubstes sich nur um eine .bat-Datei handelt, die sich in der Registrierung versteckt. Weitere Informationen finden Sie in der Antwort von @ davr.
Scott Stafford
Vorsichtsmaßnahme aus dem Wikipedia-Artikel in der akzeptierten Antwort: " Ab Windows Vista werden gelöschte Dateien sofort endgültig gelöscht und nicht in den" Papierkorb "verschoben. Vor Windows Vista (in Windows XP zum Beispiel) wurden Dateien von ersetzt" Datenträger "wurden nach dem Löschen in den Papierkorb verschoben. "
JMD
1
@IvoFlipse, das ist im Allgemeinen eine gute Annahme, aber in diesem Fall ist es einfach falsch. Das '3rd Party Tool' ist eine Batch-Datei mit 150 Zeilen, die eine nette Cli zum Ändern einer Registrierung und von Bereinigungseingaben bietet, um substden wählerischen Regeln für abschließende Schrägstriche zu entsprechen, aber es ist nur ein hübscher Wrapper . Sie können es auch ohne Programm machen, und die README-Datei psubsterklärt, wie. Oder lesen Sie Davrs Antwort weiter unten, in der er die erste README-Datei zitiert.
Alexanderbird
Ich habe eine Antwort hinzugefügt, die das Problem mit dem Papierkorb behebt
Tony Pulokas,

Antworten:

154

Nun, Wikipedia erwähnt :

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.

So können Sie Pfade mit Laufwerksbuchstaben verknüpfen subst. Die Persistent SUBST-Befehlssoftware (psubst) scheint verdammt praktisch zu sein, und sie bietet eine Lösung, um sie vom Start weg auszuführen :

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

Unbeständigkeit

Ein Neustart eines Systems zerstört jedoch eine virtuelle Festplatte. Was ist zu tun? Eine Diskette kann nach dem Start erstellt werden. Aber was tun, wenn in den ersten Schritten eines Startvorgangs eine Festplatte benötigt wird? Zum Beispiel, um Dienste auszuführen? Es gibt eine Systemfunktion zum Starten eines virtuellen Laufwerks aus der Systemregistrierung:

REGEDIT4 

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

Es reicht aus, eine Textdatei mit der Erweiterung zu erstellen .REGund auszuführen. Beim nächsten Systemstart ist die virtuelle Festplatte bei der Anmeldung vorhanden. Es muss einen Namen für den Datenträger und den Pfad definieren. Beachten Sie, dass jeder Backslash im Pfad verdoppelt wird.

In Windows können Sie den Registrierungseditor wie folgt ausführen:

  1. Start »Ausführen ... (oder Win+ drücken R)
  2. Art: regedit
  3. Unter Windows Vista und höher wird die Benutzerkontensteuerung angezeigt. Klicken Sie auf "Ja" .
Ivo Flipse
quelle
6
Gut zu wissen, obwohl ich nicht substmehr benutze . Aber damals hatte ich einfach eine Batch-Datei in meinem Startordner, die diese Dinge erledigte.
Joey
2
Das ist fantastisch. (Es ist ein Neustart erforderlich, zu Ihrer Information.) Unser Quellbaum muss mit einem bestimmten Laufwerksbuchstaben beginnen, damit unsere PDBs immer auf verschiedenen Computern ausgerichtet werden. Diese Registrierungseinstellung behebt eine Störung, die ich seit Jahren mit einer Subst-Festplatte habe, die nicht mit Runas vorhanden ist. Dies ist eine große Störung, wenn Sie Visual Studio (selten) unter einem Administratorkonto ausführen müssen.
Brian Reiter
3
Joey: Diese Lösung scheint unter Windows 7 nicht zu funktionieren. Wenn Sie eine Anwendung mit Administratorrechten ausführen, ist das ersetzte Laufwerk für die Anwendung nicht sichtbar.
Dave Jarvis
31
Danke für die Lösung. Wenn Sie die Variable interaktiv in RegEdit eingeben, dürfen Sie die umgekehrten Schrägstriche nicht verdoppeln. Erstellen Sie also eine neue Zeichenfolgenvariable mit dem Namen "Z:" (ohne Anführungszeichen) und setzen Sie den Wert auf die oben gezeigte Zeichenfolge, mit Ausnahme einzelner umgekehrter Schrägstriche.
Knuspriger
3
@ Devil'sAdvocate \??ist ein virtuelles Verzeichnis im NT-Objektmanager-Namespace. Zuerst überprüft es die DOS-Geräte der Anmeldesitzung (eigentlich sind DOS-Geräte symbolische Verknüpfungen zu NT-Geräten, die sich normalerweise in befinden \Device) und dann die \Global??DOS-Geräte. In WinObj finden Sie die Anmeldesitzungsgeräte in \Sessions\0\DosDevices\[logon ID]. Beachten Sie, dass alle Anmeldesitzungsgeräte in Sitzung 0 (Dienste) für jede LSA-Anmelde-ID nachverfolgt werden. Sie sind nicht mit Desktopsitzungen korreliert. Wenn Sie ein Laufwerk als eingeschränkten Administrator zuordnen, ist es im erhöhten Zustand nicht vorhanden. Es ist eine andere Anmeldung.
Eryk Sun
76

Die Installation unter HKEY_CURRENT_USERhat den Vorteil, dass für jeden Benutzer unterschiedliche Setups vorhanden sind. Ich ziehe es vor, die Benutzerspeicherkonfiguration beizubehalten, solange ein Systemdienst nicht vom Gerät abhängt.

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

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

166_MMX
quelle
7
+1 Zeigt an, wie mehrere Zuordnungen in einer Reg-Datei vorgenommen werden. :-)
Megaflop
4
+1 zur Vereinfachung und zur Erläuterung, warum HKEY_CURRENT_USER. :)
CAD Kerl
1
+1 für eine sehr elegante Möglichkeit, es automatisch ohne Stapel im Startordner zu tun
dkellner
3
: Kann auch von der Kommandozeile aus (seit XP / Windows 2000 Server) tut dies reg add HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run /v "F Drive" /d "subst F: D:\x\db" NB \ braucht nur hier zu entkommen , wenn es das letzte Zeichen des subst Befehls ist, zum Beispiel , wenn das Ziel des Root - Verzeichnis ist: "subst F: D:\\"; Eine einzelne \ es würde so interpretiert werden, als entkomme sie der "folgenden".
stevek_mcc
44

Die Seite, auf die Sie verlinkt haben, enthält eine Antwort. Sie benötigen kein Drittanbieter-Tool. Sie können dies mit einem einfachen Registrierungseintrag tun, wie auf dieser Seite beschrieben.

Erstellen Sie eine Textdatei mit dem Namen 'mapdrive.reg' mit den folgenden Inhalten:

REGEDIT4 

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

Dann sollte es nur möglich sein, darauf zu doppelklicken, um es einzurichten, es werden keine Tools von Drittanbietern benötigt.

davr
quelle
8
der Vorteil für den Ausrichtungs - Schlüssel im Vergleich zu der Batchdatei ist , dass es die subst Antrieb setzt , bevor eine andere Startlauf - Befehle, falls einige von denen , müssen die subst auf Funktion fahren
davr
6
@Ivo: Ich würde es eine gesunde Angst vor dem Unbekannten nennen;)
Isxek
9
Wenn Sie dies in regedit tun, stellen Sie sicher, dass Sie einzelne Backslashes verwenden. zB \ ?? \ C: \ Some \ Directory
Droj
26

Ich fand dies, weil ich nach einer Verbesserung meiner Start-Subst-Skripte suchte - sie funktionierten einwandfrei, wurden aber manchmal ausgeführt, nachdem Ordner beim Start abstürzten, weil mein Laufwerk noch nicht zugeordnet war.

Zuerst habe ich die Registrierung bearbeitet, konnte sie jedoch nicht zum Laufen bringen. Ich bin jedoch auf diese Alternative gestoßen, die, obwohl sie keine Substitute verwendet, für mich die Frage beantwortet: "Wie kann die SUBST-Zuordnung über Neustarts hinweg persistent gemacht werden?" Verwenden Sie keine Subst ... (geben Sie den entsprechenden 'Computername' und 'Pfadname' ein):

net use u: "\\ Computername \ c $ \ Pfadname" / persistent: ja

Ich habe dies aus dem Vorschlag von Hank Arnold bei dieser Diskussion über die Zuordnung lokaler Laufwerke übernommen . Ich hatte vermutet, dass \\ meinComputername \ c funktionieren könnte, wusste aber nicht, wie ich das $ anwenden sollte.

Versuchen Sie zu navigieren, bevor Sie den Befehl "net use" ausführen

\\ Computername \ c $
um sicherzustellen, dass Sie 'Computername' korrekt haben.

Salbei
quelle
2
Ausgezeichnete Lösung, wenn auch mit zwei Problemen: 1) Es ist nicht sichtbar für das lokale Dateisystem, 2) Berechtigungen ...
ashes999
6
Wenn Sie es verwenden \\localhost\c$\path\to\thing, ist es maschinenübergreifend (oder durch Upgrades, die den Computernamen ändern) portierbar. Ein Nachteil der Verwendung eines zugeordneten Laufwerks unter Win7 + ist, dass für Netzwerklaufwerke andere Sicherheitsrichtlinien gelten als für lokale. Einige Programme lehnen es einfach ab, ein zugeordnetes Laufwerk auszuführen.
Matt Wilkie
1
Es ist für das Dateisystem und für das lokale Dateisystem sichtbar - es ist als Netzwerklaufwerk gekennzeichnet, ebenso wie einige Laufwerke als austauschbare Laufwerke gekennzeichnet sind. Das macht solche Laufwerke nicht Teil des lokalen Dateisystems oder für dieses nicht sichtbar - es macht sie zu Netzwerk- / Wechseldatenträgern im lokalen Dateisystem.
user165568
1
Beim Testen habe ich ein Leistungsproblem festgestellt (vor ein paar Jahren), bei dem das (lokal) gemountete Netzwerklaufwerk ebenfalls langsamer ist als die direkte Verwendung des Dateisystems (oder Subst. Usw.). Dies ist kein enormer Unterschied für kleine Dateien oder den gelegentlichen Gebrauch - nicht wie das Übergehen des tatsächlichen Netzwerks auf einen anderen "Server" - aber es ist bedeutend.
HerbM
8

Legen Sie eine Batch-Datei in Ihrem Startordner ab, die alle SUBSTs enthält, die Sie ausführen möchten.

EBGreen
quelle
5

Da das ursprüngliche PSubst einige Einschränkungen aufweist und vom Autor geschlossen zu werden scheint, musste ich eine neue Version für meine Bedürfnisse programmieren, einige Probleme beheben und Funktionalität und Flexibilität hinzufügen.

Suchen Sie hier nach der Batch-Datei für PSubst Version 3

https://github.com/cyberponk/psubst

Kompatibel mit Windows 7, Windows 8, Windows 10, Windows Server 2012

Hinweis: Dieses Werk hat nicht die Absicht, den ursprünglichen Autor zu entkräften, sondern ist nur aus der wirklichen Notwendigkeit entstanden, wie folgt:

  • Als Newtork-Administrator habe ich das ständige Bedürfnis, Netzlaufwerke zu SUBSTIEREN und mit verschiedenen Netzbenutzern zu fummeln.

  • Da nicht jeder ein Windows-Experte ist, dachte ich, dass die automatische Administratorerhöhung mit Fehlerbehandlung helfen würde, basierend auf Kommentaren, die ich im Web gelesen habe.

  • Da einige Leute mit der Reihenfolge der Argumente zu kämpfen hatten, dachte ich, es wäre am besten, wenn das Skript mit Argumenten in beliebiger Reihenfolge arbeitet.

Ich kann mich nicht an jede hinzugefügte Funktionalität erinnern, aber jede Einbeziehung erfolgte ausschließlich aus Gründen der Notwendigkeit. Ich teile den Code, damit andere nicht auf meine Probleme stoßen. Auf diese Weise gibt es keine andere Absicht als das Teilen und Helfen.

Cyberponk
quelle
Bitte sagen Sie "A" und sagen Sie "B". Sie sind sicher, dass das Original-Psubst eine Menge Probleme hat - bitte zeigen Sie darauf, wenn dies der Fall ist. Auf der anderen Seite wird psubst nicht aufgegeben. Es hat gerade die Grenze seiner Entwicklung erreicht. Das ursprüngliche Werkzeug folgt einer sehr einfachen Philosophie: etwas tun und gut machen. Es ist nicht überladen mit zusätzlichen Funktionen wie dem Umgang mit der Benutzerkontensteuerung und dem Erstellen von zusätzlichem VBS-Code, um etwas mehr zu tun. Eine Sache kann über den ursprünglichen Code getan werden - einige kosmetische Änderungen zur Vereinfachung des Codes und zur Verbesserung der Lesbarkeit.
jsxt
Bearbeitet, bitte überprüfen. UAC und VBS sind für die automatische Administratorerhöhung vorgesehen. Ich bin mit dem Kommentar "Limit of Development" nicht einverstanden, da alle Änderungen, die ich vorgenommen habe, die Verwendung noch einfacher und einfacher machen sollten, nachdem ich mit PSUBST auf mehrere Probleme gestoßen bin. Ich habe nicht die Absicht, den ursprünglichen Autor zu kritisieren, daher werde ich keine Probleme auflisten, sondern Lösungen erstellen. Ich schlug tatsächlich vor, meine Ausgaben in den ursprünglichen Github-Zweig aufzunehmen, wurde jedoch abgelehnt, sodass ich meinen eigenen Zweig erstellen musste.
Cyberponk
Vielen Dank für Ihr schnelles und detailliertes Feedback. Höchstwahrscheinlich muss ich mir Ihre Entwicklung genauer ansehen.
jsxt
Mein Hut ist weg von dir; Ich habe meine Zeit in den Batch-Scripting-Gräben verbracht und weiß, wie schmerzhaft es ist. Dieser Code sieht ganz gut aus.
SilverbackNet
2

Ich erweitere die Antwort von davr, da alle Dateien, die vom zugeordneten Laufwerk gelöscht werden, dauerhaft gelöscht werden, anstatt in den Papierkorb zu gelangen. Diese REG-Datei basiert auf den Informationen in diesem TechNet-Artikel , in dem erläutert wird, wie der Papierkorb aktiviert wird. Das Beispiel ordnet das virutale Q-Laufwerk dem Ordner "OneDrive - Test" zu und aktiviert den Papierkorb auf dem Q-Laufwerk. Ändern Sie die Pfade und Namen entsprechend Ihrer 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

Wenn Sie nur ein solches zugeordnetes Laufwerk haben, können Sie die GUID {9147E464-33A6-48E2-A3C9-361EFD417DEF} verwenden. Wenn Sie mehrere zugeordnete Laufwerke haben, sollte jedes mit einer GUID Ihres bevorzugten GUID-Generators übereinstimmen.

Tony Pulokas
quelle
Einige meiner Beobachtungen: Wenn Sie nur die Werte unter setzen HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FolderDescriptions\{GUID}und neu starten, werden die entsprechenden Werte unter HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\BitBucket\KnownFolder\{GUID}automatisch von Windows generiert. Unter den Wow6432NodeSchlüsseln tauchte für mich nichts auf , aber der Papierkorb funktionierte ohne sie. Dies war auf einem Windows 7-System, daher bin ich mir nicht sicher, ob es sich bei neueren Versionen anders verhält.
Herohtar,
1
Um ein bisschen Daten hinzuzufügen, habe ich ein 64-Bit-Win-10-System und getestet, was beim Löschen aus einer 32-Bit-App (FastStone Image Viewer) passiert ist, und festgestellt, dass der Papierkorb für die 32 nicht funktioniert hat -Bit-App ohne die Wow6432Node-Schlüssel.
Tony Pulokas