È possibile ricollegare un'unità di rete mappata dalla riga di comando?


32

Ogni giorno mi trovo nel prompt dei comandi di Windows che deve accedere a un'unità di rete mappata ma disconnessa. Devo ancora trovare un comando che ricollegherà questa unità senza decomprimere e rimappare (il che porta a un gioco di indovinare la password, dal momento che non possiedo questi computer). Vorrei anche essere in grado di scrivere questo script in modo che ogni notte l'unità venga ricollegata se in qualche modo è stata disconnessa.

La soluzione più veloce che ho attualmente è:

  1. Digita " start." per aprire explorer,
  2. Alt- Dper focalizzare la barra degli indirizzi,
  3. digitare la lettera di unità desiderata e premere Invio, quindi attendere che visualizzi il contenuto dell'unità,
  4. infine, chiudi explorer e torna al prompt dei comandi.

So che è un piccolo inconveniente, ma spesso lo sto facendo tramite una connessione VNC o PCAnywhere lenta in cui fare qualsiasi cosa tramite la GUI è terribile, quindi mi chiedo solo se c'è una soluzione migliore.


1
Cosa succede quando `dir h: \`?
wfaulk,

3
Invece di digitare "start. <enter>" puoi semplicemente fare win-E e salvare 5 sequenze di tasti ;-)
da

1
L'ho "risolto" semplicemente usando il percorso \\ server \ share anziché l'unità mappata. Puoi semplicemente copiare i file se necessario. (Quello era il mio problema)
Peterdk,

Risposte:


12

Forse provare pushd \\server\share?


2
Non sono sicuro che questo sia quello di cui ho bisogno. Sembra che Pushd crei lettere di unità temporanee; Ho già mappato una lettera di unità, ma la condivisione è disconnessa (ha una X rossa in Explorer ed è etichettata "Disconnected Network Drive"). Forse mi sbaglio.
Stephen Jennings,

Sì, stavo pensando che accedervi in ​​quel modo avrebbe potuto spingere il disco verso la riconnessione. È possibile utilizzare popdper rimuovere la lettera di unità.
wfaulk,

Lo proverò la prossima volta che incontro questo. Ho il sospetto che non riuscirà a dire che il dispositivo è in uso o collega la lettera di unità errata alla condivisione.
Stephen Jennings,

2
Ho provato questo e in realtà ha funzionato. Per prima cosa ho eseguito pushd sulla condivisione, quindi ho visualizzato PopD per annullare la mappatura della lettera di unità aggiuntiva e ho scoperto che l'unità mappata che volevo fosse connessa di nuovo. Questo è sicuramente un voto positivo, e se non avrò una risposta più breve in un paio di giorni, questo sarà accettato.
Stephen Jennings,

1
Non ho ancora la possibilità di effettuare il downvoting, ma questa risposta non ha fatto nulla per me. Vedi diversi post qui sotto per vedere quale ha fatto. Ho anche lasciato un commento lì.
prl77,

8

Devo avviare Windows 7 prima di poter eseguire il programma VPN che mi collega alle unità di rete dell'azienda. Pertanto le mie unità di rete non si riconnettono automaticamente, ma solo aprendole in Esplora risorse le ricollegano.

Ho creato un piccolo file batch per avviare la VPN, riconnettere le unità di rete e avviare alcune applicazioni che utilizzo sempre.

Nel mio file Batch ho il seguente:

REM Connect VPN here...

REM Opens an Explorer window looking at T: forcing a reconnect
Start /min explorer t:\

timeout 3 /nobreak

REM Kill all Explorer windows beginning with "T_drive" in the title
Taskkill /fi "windowtitle eq T_drive*"

REM Finish starting up here...

exit

Il Taskkill /fi "windowtitle eq"comando fa distinzione tra maiuscole e minuscole!


Grazie amico, questa è stata l'unica risposta su tutto questo thread che mi ha aiutato. Ovviamente l'ho votato, ma non ho ancora la possibilità di votare per quei post sopra di te.
prl77,

A proposito, non trovo che "taskkill" abbia la distinzione tra maiuscole e minuscole, almeno non su Win 7 x64 con le ultime patch.
prl77,

Nota: se i parametri di taskkill sopra indicati non funzionano per te, prova a utilizzare TASKLIST / FI "IMAGENAME eq explorer.exe" / V per vedere qual è il titolo corretto della finestra. La mia stringa di filtro per TASKKILL è stata "windowtitle eq c $ *"
Luca

Grazie Luke per il tuo commento. Mi ha davvero aiutato
Pawel,

7

creare un file batch (refreshletters.cmd) con questi comandi al suo interno

( funzioneranno solo all'interno di un file batch )

Testato su Win7 e XP per aggiornare le lettere del driver "Disconnected" e "Non disponibile" in una finestra della console (riga di comando).

@echo off
net use |FIND ":" > %temp%\used.txt
FOR /F " tokens=1,2,3 delims= " %%i in (%temp%\used.txt) do (

  if %%i EQU Unavailable  (
    net use %%j %%k
    echo Activated %%j
   ) ELSE (
     if %%i EQU Disconnected (
       pushd .
       cd /d %%j
       dir . %>nul
       if NOT exist %%j\. (
          net use %%j /del /y
          net use %%j %%k
          echo Remapped %%j
          ) else (
             echo Fixed-up %%j
            )
       popd
       ) ELSE (
          echo Checked %%j
          )
     )
 )

Dato che non conosciamo il livello di competenza del PO, potrebbe essere una buona idea ampliare la tua risposta.
Tog

net usefunziona per me per unità mappate non disponibili in Win7. ty
Mat M,

1
Non ho ancora la possibilità di effettuare il downvoting, ma questa risposta non ha fatto nulla per me. Vedi il post qui sotto di Claus Melander che lo ha fatto. Ho anche lasciato un commento lì.
prl77,

1
Funziona (testato con win7 x64), ma dipende dall'output dipendente dalla lingua di net use, mentre cerca Unavailable. Ma per una win7 tedesca che ottieni Nicht verfgb, devi modificare la soluzione nella tua lingua
jeb

Questo ha funzionato per me, ad eccezione di una condivisione che aveva uno spazio nel percorso di rete ... Comunque, ho appena finito di fare alcune righe codificate "net use X: \\ share \ path" in un file batch e ho lo terrò aggiornato se dovessi mai cambiare i mapping delle unità. Questa è la soluzione migliore per me perché non voglio davvero aprire una finestra di Explorer per riavviare l'unità ...
Aaron,

6

Questa è probabilmente una domanda stupida, ma supponendo che il tuo disco "disconnesso" sia H: hai provato a passare direttamente al disco?

Funziona per me con XPSP3:

C:\>net use
New connections will be remembered.


Status       Local     Remote                    Network

-------------------------------------------------------------------------------
Disconnected H:        \\xxxxxx\wfaulk           Microsoft Windows Network
OK                     \\xxxxxxx\business        Microsoft Windows Network
The command completed successfully.


C:\>h:

H:\>net use
New connections will be remembered.


Status       Local     Remote                    Network

-------------------------------------------------------------------------------
OK           H:        \\xxxxxx\wfaulk           Microsoft Windows Network
OK                     \\xxxxxxx\business        Microsoft Windows Network
The command completed successfully.

2
Il prompt dei comandi non consente di passare a un'unità di rete attualmente disconnessa. Almeno non sulle centinaia di computer su cui lo sto usando (WinNT, Win2k, WinXP, WinXP Embedded).
Stephen Jennings,

1
Strano. Giuro che funziona per me.
wfaulk,

funziona anche per me!
Snark

Ammetto di aver visto questo lavoro di tanto in tanto, ma il più delle volte no. Non so cosa determini in un modo o nell'altro, possibilmente se ci sono o meno le credenziali salvate.
Stephen Jennings,

1
Oh, scommetto che è tutto. Mi autentico automaticamente usando le mie credenziali di dominio.
wfaulk,

4

So che hai detto che "net use" non ha funzionato per te, ma ecco cosa potresti provare.

Eseguire un file batch con l'opzione net use / DELETE per rimuovere le connessioni esistenti / persistenti E quindi è possibile utilizzare net use con l'opzione / SAVECRED per riutilizzare le credenziali passowd utilizzate nell'ultimo accesso riuscito. Non sono sicuro se questo risolverà il tuo problema, ma vale la pena esaminarlo.


Questo non è proprio quello di cui ho bisogno, ma è sicuramente una cosa utile da sapere. Questo risolve un altro problema che ho avuto.
Stephen Jennings,

2

Ho lo stesso problema con più connessioni ed è intermittente. Quando riavvio il computer, a volte la connessione è "buona", a volte no. Non ho il problema con la password poiché sono su una LAN aziendale, ma ho ancora l'altro aspetto del problema.

Ho creato un file batch chiamato ex.bat e memorizzato (insieme a molte altre cose) in una directory \ util che ho inserito nel mio percorso. Posso digitare "ex h:" e verrà eseguito Windows Explorer e impostarlo per andare direttamente all'unità h :. Ecco il file batch:

start explorer /e,/select,%1

Funziona, con molte meno battiture. O se all'inizio non funziona, premi il tasto Invio per aprire la cartella h: root e visualizzare i contenuti. In alternativa, digitare "ex h: \ sub" dove esiste la sottocartella "sub".

Questo problema sembra essere peggiorato molto recentemente, forse a causa di una delle patch di sicurezza di Windows XP.

Un'altra cosa da provare è sul lato server. Sui server Windows, la modifica di una chiave del Registro di sistema dovrebbe impedire al server di disconnettere le connessioni in caso di timeout. Lo faccio praticamente su tutti i nostri server. Il file è:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\lanmanserver\parameters]
"autodisconnect"=dword:ffffffff

Da un processo eseguito come un altro utente, start explorerfunzionerebbe solo se entrambi gli utenti hanno l'impostazione "Esegui le finestre delle cartelle in un processo separato".
Ivan_pozdeev,

1

Ho avuto un problema simile e ho scoperto che potevo forzare una riconnessione con un semplice "dir x:" dalla riga di comando (dove X: era l'unità mappata ma disconnessa.) Da un sistema Server 2003 alle unità mappate su XP e Win7 computers.

Ho creato un file batch, wake_network_drives.bat, con queste due righe:

    dir x:
    dir z:

e impostare un'attività pianificata per eseguirla ogni sera prima che il programma di backup non funzionasse perché le unità venivano occasionalmente mostrate come disconnesse.


Questo funziona Anche se il dircomando ti dà un errore, tende a riattivare l'unità di rete disconnessa. Questa è la risposta migliore di tutte.
Elliot Cameron,

0

Basta digitare:

NET USE H: \\server\share

(dove H: è la tua lettera di unità ovviamente)

Digita "NET /? USA 'per vedere tutte le opzioni che questo comando ti offre.


Questo non funziona. La lettera di unità è già mappata, è appena disconnessa (di solito è stato riavviato l'altro computer). Quando si esegue questo, si lamenta che il dispositivo è già in uso.
Stephen Jennings,

Sì, l'ho provato subito e ho ottenuto "Nome dispositivo locale già in uso".
Stephen Jennings,

1
Funziona per me ... ma sono su Windows 7, e in realtà l'unità si riconnette da sola ... Prova NET USE H: semplice (senza il percorso), che dovrebbe ripristinare la connessione. Dimentico come era in XP.
Zoran,

0

Se non sei contrario a mantenere queste password come testo normale in un batch, puoi scrivere una cancellazione e rimappare incluse le credenziali.

net use H: /delete
net use H: \\server\share /user:domain\user password /persistent:yes

So che non soddisfa il tuo requisito di non eliminare la condivisione, ma risolve la radice del problema di dover ricordare le password.


Come professionista IT, sono contrario, sia per me stesso che per i miei utenti.
Ivan_pozdeev,

0

TL; Riepilogo DR: usare net useeif exist

Ho riscontrato un problema correlato durante la creazione di uno script di backup notturno. Doveva verificare se un computer era acceso (usando il ping), inviare un pacchetto magico per accenderlo se necessario (usando MC-WOL ), attendere l'avvio di Windows, quindi stabilire una connessione a una condivisione SMB e attendere essere presente.

Mentre le altre risposte qui sono fantastiche, non volevo che le lettere di unità mappate saltassero dentro / fuori dall'esistenza, o per disconnettere qualsiasi cosa con cui l'utente potesse lavorare, né che le finestre di Explorer lampeggiassero. cioè un obiettivo era zero distrazione dell'utente .

Ecco un pezzo di codice che potrebbe esserti utile:

set TARGET_IP=192.168.1.3
set TARGET_PATH=\\%TARGET_IP%\d$\backups
set ATTEMPTS=0

:LOOP

REM Give up eventually
if %ATTEMPTS% GEQ 200 goto NOJOY

REM Wait for IP connectivity to host, and/or burn up a couple seconds before retry
ping -n 1 -w 2000 %TARGET_IP% | find "TTL" > nul
if errorlevel 1 set /a ATTEMPTS+=1 & goto LOOP

REM See if we're already connected, and try to give it a kick
if exist %TARGET_PATH% goto CONNECTED

REM Try to reconnect
net use %TARGET_PATH% > nul
if errorlevel 1 set /a ATTEMPTS+=1 & goto LOOP

:CONNECTED
echo Connected
exit /b

:NOJOY
echo Couldn't connect

Se preferisci, puoi sostituire l'indirizzo IP sopra con un nome host (ad es server1.).

net useè necessario nel caso in cui non sia presente alcuna connessione esistente. Mi sono imbattuto in alcuni casi angolari in cui da solo sembrava insufficiente per "riattivare" la condivisione (ad esempio se esisteva una connessione precedente esistente in uno stato disconnesso). Ho trovato la if existsdirettiva ha un effetto simile a quello delle alternative di cui in altre risposte (come pushd, dir, Explorer, ecc), ma sembrava un approccio più leggero.


0

La risposta di StanZ ha funzionato per me, ma ho dovuto essere in grado di determinare in modo programmatico qualsiasi unità mappata senza uno stato OK, poiché gli utenti del nostro dominio ottengono diverse mappature delle unità. Ho codificato qui per essere eseguito come versione autonoma, che esegue net useprima e dopo il codice effettivo, in modo che tu possa vedere i risultati, ma devi solo copiare FORun'istruzione (tre righe) nel tuo codice per ottenere i risultati desiderati.

@ECHO OFF
::  
:: revision of answer from StanZ on superuser.com at the following url  
:: https://superuser.com/questions/52595/can-a-mapped-network-drive-be-reconnected-from-the-command-line/367910#367910  
:: https://superuser.com/a/367910  
:: which resulted in my  
::  
:: DriveStatusOK.bat  
:: iCharlieC  
::  
SETLOCAL ENABLEEXTENSIONS  
::  
:: you need only copy the one FOR statement (three lines)  
::   to use in your own code  
::   to force status of mapped network drives to OK  
::  
:: "tokens=1-2 delims=: " is used in the for statement  
:: to output only the drive letter from the output of...  
:: net use  
:: is piped to the first findstr which outputs only lines with drive letters  
::   then piped to another findstr to eliminate drives with a status of OK  
::   then piped to another findstr to get lines that start with a status  
::     -in other words, those lines that the first character is a letter-  
::     -this due to the fact that in our domain we have a drive  
::      that is mapped to a letter, but never has a status.  
::      I do not know the reason for this,  
::      but adding that last findstr prevents me from getting an error  
::      from trying to execute a dir on a non-existant drive letter.-  
::   then dir is executed on each drive letter (after appending ":\" to the letter)  
::      and the output redirected to NUL  
::  
:: run net use before as a visual here  
net use  
::  
FOR /F "tokens=1-2 delims=: " %%i in (  
    'net use ^| findstr ":" ^| findstr /i /v "^OK" ^| findstr /i "^[A-Z]"'  
    ) do dir "%%j:" > NUL  
::  
:: run net use after "waking" drive(s)  
net use  
::  
ENDLOCAL  

0

Forse una vecchia domanda, ma ancora rilevante nel 2017 e in Windows 10 perché le condivisioni di rete spesso non vengono ricollegate o collegate correttamente da Windows per diversi motivi. Sulla base di questo problema e dell'assenza di una soluzione realmente praticabile e perfettamente funzionante, ho creato un progetto Github che contiene un'attività Scheduler e un VBS che risolve il problema semplicemente provando a ricollegare le unità dopo il riavvio o l'accesso se non connesso o online.

Lo script è completamente configurabile e può essere impostato in base alle esigenze dell'utente reale.

Percorso del progetto Github

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.