Come rendere persistente la mappatura SUBST tra i riavvii?


177

Windows (XP o successivo) ha un modo integrato per creare mappature di unità persistenti, come quelle create da SUBST? Ho trovato uno strumento di terze parti psubst . C'è un modo per farlo senza strumenti di terze parti?


È possibile, perché psubstè solo un file .bat che utilizza il registro. Vedi la risposta di @ davr sotto per i dettagli.
Scott Stafford,

Avvertenza dall'articolo di Wikipedia nella risposta accettata: " A partire da Windows Vista, i file eliminati vengono immediatamente eliminati in modo permanente e non vengono spostati nel" Cestino ". Prima dei file di Windows Vista (ad esempio in Windows XP) sostituiti" dischi "sono stati spostati nel Cestino quando eliminati. "
JMD

1
@IvoFlipse, questa è una buona ipotesi in generale, ma in questo caso è semplicemente sbagliata. Lo "strumento di terze parti" è un file batch di 150 righe che fornisce un bel cli per la modifica di un registro e la pulizia dell'input per conformarsi alle substdifficili regole della barra finale, ma è solo un grazioso wrapper . Puoi farlo senza un programma e il README per psubstspiega come. Oppure, vedi la risposta di davr qui sotto dove cita il psubst README.
alexanderbird,

Ho aggiunto una risposta che risolve il problema del Cestino
Tony Pulokas,

Risposte:


153

Bene Wikipedia menziona :

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.

Quindi è possibile associare percorsi a lettere di unità utilizzando subst. Il software di comando persistente SUBST (psubst) sembra essere estremamente utile e forniscono una soluzione per eseguirlo all'avvio:

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

Incostanza

Tuttavia, il riavvio di un sistema distrugge un disco virtuale. Cosa fare? Un disco può essere creato dopo l'avvio. Ma cosa fare quando è necessario un disco nelle fasi iniziali di un avvio? Ad esempio, per eseguire servizi? Esiste una funzione di sistema per avviare un disco virtuale dal registro di sistema:

REGEDIT4 

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

È sufficiente creare un file di testo con l'estensione .REGed eseguirlo. Al successivo avvio di un sistema, il disco virtuale sarà presente all'accesso. Deve definire un nome di disco e percorso. Si noti che ogni barra rovesciata nel percorso è raddoppiata.

In Windows, puoi eseguire l'editor del registro come segue:

  1. Start »Esegui ... (o premi Win+ R)
  2. Genere: regedit
  3. In Windows Vista e versioni successive, verrà visualizzato UAC, fare clic su "Sì" .

6
Bello da sapere, anche se non lo uso substpiù. Ma nei tempi in cui lo facevo, avevo semplicemente un file batch nella mia cartella Startup che faceva quelle cose.
Joey,

2
Questo e spettacolare. (Richiede un riavvio, FYI.) Il nostro albero dei sorgenti deve partire da una lettera di unità specifica in modo che i nostri PDB siano sempre allineati su computer diversi. Questa impostazione del registro risolve un fastidio che ho avuto per anni con un disco subst non presente con le rune, il che è un grande fastidio se è necessario (raramente) eseguire Visual Studio con un account amministratore.
Brian Reiter,

3
Joey: questa soluzione non sembra funzionare su Windows 7. Quando si esegue un'applicazione con privilegi di amministratore, l'unità sostituita non è visibile all'applicazione.
Dave Jarvis,

31
Grazie per la soluzione Cordiali saluti, se si digita la variabile in RegEdit in modo interattivo, non raddoppiare le barre rovesciate. Ossia, crea una nuova variabile stringa denominata "Z:" (senza virgolette) e imposta il valore sulla stringa mostrata sopra tranne che con le singole barre rovesciate.
Croccante

3
@ Devil'sAdvocate, \??è una directory virtuale nello spazio dei nomi del gestore oggetti NT. Per prima cosa controlla la sessione di accesso "dispositivi" DOS (in realtà i dispositivi DOS sono collegamenti simbolici ai dispositivi NT, di solito situati in \Device) e quindi i \Global??dispositivi DOS. In WinObj troverai i dispositivi della sessione di accesso in \Sessions\0\DosDevices\[logon ID]. Si noti che tutti i dispositivi della sessione di accesso sono tracciati nella sessione 0 (servizi) per ciascun ID di accesso LSA. Non sono correlati con le sessioni desktop. Ecco perché se si mappa un'unità come amministratore limitato non esiste se elevata; è un accesso diverso.
Eryk Sun,

76

L'installazione su HKEY_CURRENT_USERha il vantaggio di avere impostazioni diverse per ciascun utente. Preferisco attenersi alla configurazione dello spazio utente purché un servizio di sistema non dipenda dal dispositivo.

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

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


7
+1 Per mostrare come eseguire più mappature in un file reg. :-)
megaflop,

4
+1 per semplicità e spiegando anche perché HKEY_CURRENT_USER. :)
Bloke CAD,

1
+1 per mostrare un modo molto elegante per farlo automagicamente senza un batch nella cartella di avvio
dkellner

3
Può farlo anche dalla riga di comando (dal XP / Windows Server 2000): reg add HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run /v "F Drive" /d "subst F: D:\x\db" NB \ bisogno fuga qui solo se è l'ultimo carattere del comando subst, ad esempio, quando l'obiettivo è la directory root: "subst F: D:\\"; un singolo \ là verrebbe interpretato come in fuga dal "seguito.
stevek_mcc

45

C'è una risposta nella pagina a cui ti sei collegato. Non hai bisogno dello strumento di terze parti, puoi farlo con una semplice voce di registro, come dettagliato in quella pagina.

Crea un file di testo chiamato 'mapdrive.reg' con questi contenuti:

REGEDIT4 

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

Quindi dovrebbe essere in grado di fare doppio clic su di esso per impostare, non sono necessari strumenti di terze parti.


8
il vantaggio della chiave reg rispetto al file batch è che imposta l'unità subst prima che
vengano

6
@Ivo: lo definirei una sana paura dell'ignoto;)
Isxek,

9
Se lo fai in regedit, assicurati di usare singole barre rovesciate. es. \ ?? \ C: \ Some \ Directory
Droj,

27

L'ho trovato perché stavo cercando un miglioramento rispetto ai miei script subst di avvio: funzionavano bene, ma a volte venivano eseguiti dopo il crash delle cartelle all'avvio perché l'unità non era ancora mappata.

Innanzitutto, ho modificato il registro, ma non sono riuscito a farlo funzionare. Tuttavia, mi sono imbattuto in questa alternativa, che sebbene non utilizzi subst mi risponde alla domanda "Come rendere persistente la mappatura SUBST attraverso i riavvii?" Non usare subst ... (inserire "computerName" e "pathName" appropriati):

net use u: "\\ computerName \ c $ \ pathName" / persistente: sì

L'ho adattato dal suggerimento di Hank Arnold a questa discussione sulla mappatura delle unità locali . Avevo supposto che \\ myComputerName \ c potesse funzionare, ma non sapevo di applicare $.

Prima di provare il comando "net use", prova a navigare

\\ nomecomputer \ c $
per assicurarti di avere "computerName" corretto.


2
Ottima soluzione, anche se con due problemi: 1) non è visibile al file system locale, 2) autorizzazioni ...
ashes999

6
se lo usi \\localhost\c$\path\to\thingè portatile su più macchine (o aggiornamenti che cambiano il nome del computer). Uno svantaggio dell'utilizzo di un'unità mappata su Win7 + è che alle unità di rete si applicano politiche di sicurezza diverse rispetto a quelle locali e alcuni programmi si rifiuteranno semplicemente di eseguire un'unità mappata.
matt wilkie,

1
È visibile al file system ed è visibile al file system locale: è contrassegnato come unità di rete, così come alcune unità sono contrassegnate come unità rimovibili. Ciò non rende tali unità non parte o non visibili al file system locale, ma le rende unità di rete / rimovibili nel file system locale.
user165568

1
Nei test che ho fatto per un problema di prestazioni (un paio d'anni fa) l'uso dell'unità di rete (localmente) montata è anche più lento rispetto all'utilizzo diretto del file system (o subst ecc.). Questa non è un'enorme differenza per i file di piccole dimensioni o per l'uso occasionale - non è come passare attraverso la rete effettiva a un altro "server" - ma è significativa.
HerbM,

8

Rilascia un file batch nella cartella Startup che fa tutti i SUBST che vuoi fare.


5

Poiché l'originale PSubst presenta alcune limitazioni e sembra essere stato concluso dall'autore, ho dovuto codificare una nuova versione per le mie esigenze, risolvere alcuni problemi e aggiungere funzionalità e flessibilità.

Controlla qui per il file batch di PSubst versione 3

https://github.com/cyberponk/psubst

Compatibile con Windows 7, Windows 8, Windows 10, Windows Server 2012

Nota: quest'opera non ha intenzione di demeritare l'autore originale e è venuta alla luce solo per necessità reale, come segue:

  • Come amministratore di newtork ho il costante bisogno di unità di rete SUBST e giocherellare con diversi utenti di rete.

  • Dato che non tutti sono esperti di Windows, ho pensato che l'elevazione automatica dell'amministratore con la gestione degli errori avrebbe aiutato, sulla base dei commenti che ho letto sul web.

  • Dato che alcune persone hanno lottato con l'ordine degli argomenti, ho pensato che sarebbe stato meglio che la sceneggiatura funzionasse con gli argomenti in qualsiasi ordine.

Non riesco a ricordare tutte le funzionalità aggiunte, ma ogni inclusione è stata fatta solo per necessità. Condivido il codice in modo che gli altri non possano incontrare i problemi che ho avuto. Con questo non c'è altra intenzione che condividere e aiutare.


Per favore, dicendo "A" di "B". Hai il sospetto che lo psubst originale abbia molti problemi - per favore, fai attenzione su di loro se lo sono. D'altra parte, il psubst non viene abbandonato. Ha appena raggiunto il limite del suo sviluppo. Lo strumento originale segue una filosofia molto semplice: fai qualcosa e fai bene. Non è sovraccarico di funzionalità extra come la gestione con UAC e la creazione di codice vbs aggiuntivo per fare qualcosa di più. Una cosa può essere fatta rispetto al codice originale: alcune modifiche estetiche per semplificare il codice e migliorare la leggibilità.
jsxt,

Modificato, si prega di rivedere. Controllo dell'account utente e vbs è per l'elevazione automatica dell'amministratore. Non sono d'accordo sul commento "limite di sviluppo", poiché tutte le modifiche che ho apportato hanno reso l'utilizzo ancora più semplice e facile dopo aver riscontrato diversi problemi con PSUBST. Non intendo criticare l'autore originale, quindi non elencherò i problemi, ma invece ho creato soluzioni. In realtà ho proposto di aggiungere le mie edizioni nel ramo github originale, ma mi è stato rifiutato, quindi ho dovuto creare il mio ramo.
cyberponk,

Grazie per il tuo feedback rapido e dettagliato. Molto probabilmente ho bisogno di dare un'occhiata più da vicino al tuo sviluppo.
jsxt

Il mio cappello ti è andato via; Ho trascorso il mio tempo nelle trincee di scripting batch e so quanto sia doloroso. Quel codice sembra abbastanza buono.
SilverbackNet,

2

Sto espandendo la risposta di davr perché tutti i file che vengono eliminati dall'unità mappata vengono eliminati definitivamente invece di andare nel Cestino. Questo file REG si basa sulle informazioni compilate da questo articolo TechNet , che discute su come abilitare il Cestino. L'esempio associa l'unità Q virutale alla cartella "OneDrive - Test" e abilita il Cestino sull'unità Q. Modifica i percorsi e il nome in base alla tua situazione.

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

Se hai solo una di queste unità mappate, puoi cavartela con il GUID {9147E464-33A6-48E2-A3C9-361EFD417DEF}. Se hai più unità mappate, ognuna dovrebbe essere abbinata a un GUID del tuo generatore GUID preferito.


Alcune mie osservazioni: se hai appena impostato i valori sotto HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FolderDescriptions\{GUID}e riavviato, i valori corrispondenti sotto HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\BitBucket\KnownFolder\{GUID}sono generati automaticamente da Windows. Nulla mi è apparso sotto i Wow6432Nodetasti, ma il cestino ha funzionato senza di loro. Questo era su un sistema Windows 7, quindi non sono sicuro che si comporti diversamente sulle versioni più recenti.
Herohtar,

1
Solo per aggiungere un po 'di dati, ho un sistema Win 10 a 64 bit e ho testato cosa è successo durante l'eliminazione da un'app a 32 bit (FastStone Image Viewer) e ho scoperto che il cestino non funzionava per il 32 -bit app senza le chiavi Wow6432Node.
Tony Pulokas,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.