Czy zmapowany dysk sieciowy można ponownie podłączyć z wiersza polecenia?


32

Codziennie znajduję się w wierszu polecenia systemu Windows, który wymaga dostępu do dysku sieciowego, który jest zamapowany, ale odłączony. Muszę jeszcze znaleźć polecenie, które ponownie połączy ten dysk bez odwzorowywania i mapowania (co prowadzi do gry polegającej na odgadywaniu hasła, ponieważ nie posiadam tych komputerów). Chciałbym również móc to zrobić, więc co noc dysk jest podłączany ponownie, jeśli zostanie w jakiś sposób odłączony.

Najszybszym rozwiązaniem, jakie obecnie mam, jest:

  1. Wpisz „ start.”, aby otworzyć Eksploratora,
  2. Alt- Daby skoncentrować pasek adresu,
  3. wpisz żądaną literę dysku i naciśnij klawisz Enter i poczekaj, aż wyświetli się zawartość dysku,
  4. następnie w końcu zamknij Eksploratora i wróć do wiersza poleceń.

Wiem, że to drobna niedogodność, ale często robię to przez powolne połączenie VNC lub PCAnywhere, gdzie robienie czegokolwiek za pomocą GUI jest okropne, więc zastanawiam się, czy istnieje lepsze rozwiązanie.


1
Co się stanie, gdy `dir h: \`?
wfaulk

3
Zamiast pisać „start. <enter>” możesz po prostu zrobić Win-E i zapisać 5 kombinacji klawiszy ;-)
fretje

1
„Rozwiązałem” to za pomocą ścieżki \\ server \ share zamiast zamapowanego dysku. Możesz po prostu skopiować pliki, jeśli potrzebujesz. (To był mój problem)
Peterdk

Odpowiedzi:


12

Może spróbować pushd \\server\share?


2
Nie jestem pewien, czy tego właśnie potrzebuję. Pushd wygląda, jakby tworzył tymczasowe litery dysków; Mam już zmapowaną literę dysku, ale udział jest odłączony (ma czerwony znak X w Eksploratorze i jest oznaczony jako „Odłączony dysk sieciowy”). Może się mylę.
Stephen Jennings

Tak, myślałem, że dostęp do niego w ten sposób może zmusić dysk do ponownego połączenia. Możesz użyć popddo usunięcia litery dysku.
wfaulk

Spróbuję następnym razem, gdy się z tym spotkam. Podejrzewam, że albo nie powie, że urządzenie jest w użyciu, albo podłączy niewłaściwą literę dysku do udziału.
Stephen Jennings

2
Próbowałem tego i faktycznie zadziałało. Najpierw uruchomiłem pushd do udziału, a potem popd, aby odwzorować dodatkową literę dysku, i znalazłem, że zamapowany dysk, który chciałem, został ponownie podłączony. To zdecydowanie głosowanie pozytywne, a jeśli nie otrzymam krótszej odpowiedzi w ciągu kilku dni, zostanie to zaakceptowane.
Stephen Jennings

1
Nie mam jeszcze możliwości głosowania w dół, ale ta odpowiedź nic mi nie zrobiła. Zobacz kilka postów poniżej, aby zobaczyć, które to zrobiło. Zostawiłem tam również komentarz.
prl77

8

Muszę uruchomić system Windows 7, zanim będę mógł uruchomić program VPN, który łączy mnie z dyskami sieciowymi firmy. Dlatego moje dyski sieciowe nie łączą się automatycznie, tylko otwarcie ich w Eksploratorze Windows ponownie je łączy.

Zrobiłem mały plik wsadowy, aby uruchomić VPN, ponownie podłączyć dyski sieciowe i uruchomić niektóre aplikacje, z których zawsze korzystam.

W moim pliku wsadowym mam następujące elementy:

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

W Taskkill /fi "windowtitle eq"poleceniu rozróżniana jest wielkość liter!


Dzięki człowieku, to była jedyna odpowiedź w całym tym wątku, która mi pomogła. Oczywiście głosowałem za tym, ale nie mam jeszcze możliwości głosowania w przypadku tych postów powyżej ciebie.
prl77

Przy okazji, nie uważam, że „taskkill” ma rozróżnianie wielkości liter, przynajmniej nie w Win 7 x64 z najnowszymi łatkami.
prl77

Uwaga: Jeśli powyższe parametry zadania nie działają, spróbuj użyć TASKLIST / FI „IMAGENAME eq explorer.exe” / V, aby zobaczyć, jaki jest prawidłowy tytuł okna. Mój ciąg filtru dla TASKKILL zakończył się na „windowtitle eq c $ *”
Luke

Dziękuję Luke za komentarz. Naprawdę mi pomogło
Paweł

7

utwórz plik wsadowy (refreshletters.cmd) z tymi poleceniami

( będą działać tylko w pliku wsadowym )

Przetestowano na Win7 i XP, aby odświeżyć litery sterowników „Odłączone” i „Niedostępne” w oknie konsoli (wiersz poleceń).

@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
          )
     )
 )

Biorąc pod uwagę, że nie znamy poziomu wiedzy specjalistycznej PO, dobrym pomysłem może być poszerzenie twojej odpowiedzi.
Tog

net usedziała dla mnie dla niedostępnych mapowanych dysków w Win7. ty
Mat M

1
Nie mam jeszcze możliwości głosowania w dół, ale ta odpowiedź nic mi nie zrobiła. Zobacz poniższy post Claus Melander, który to zrobił. Zostawiłem tam również komentarz.
prl77

1
Działa (testowany z Win7 x64), ale zależy od wyjścia zależnego od języka net use, podczas skanowania Unavailable. Ale w przypadku niemieckiego win7 Nicht verfgbmusisz zmodyfikować rozwiązanie w swoim języku
jeb

To działało dla mnie, z wyjątkiem jednego udziału, który miał miejsce na ścieżce sieci ... W każdym razie skończyło się na zrobieniu kilku zakodowanych wierszy „net use X: \\ share \ path” w pliku wsadowym i ja będę go aktualizować, jeśli kiedykolwiek zmienię mapowania dysków. Jest to dla mnie najlepsze rozwiązanie, ponieważ tak naprawdę nie chcę otwierać okna Eksploratora, aby ponownie podłączyć dysk ...
Aaron

6

To prawdopodobnie głupie pytanie, ale zakładając, że „odłączony” dysk to H :, próbowałeś właśnie zmienić bezpośrednio na dysk?

Działa dla mnie pod 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
Wiersz polecenia nie pozwala na przełączenie na dysk sieciowy, który jest obecnie odłączony. Przynajmniej nie na setkach komputerów, z których korzystam (WinNT, Win2k, WinXP, WinXP Embedded).
Stephen Jennings

1
Dziwne. Przysięgam, że to dla mnie działa.
wfaulk

to też działa dla mnie!
Snark

Przyznaję, że widziałem tę pracę od czasu do czasu, ale przez większość czasu nie. Nie wiem, co determinuje w ten czy inny sposób, być może to, czy są zapisane poświadczenia.
Stephen Jennings,

1
Założę się, że to tyle. Automatycznie uwierzytelniam się przy użyciu poświadczeń domeny.
wfaulk 10.10.2009

4

Wiem, że powiedziałeś, że „wykorzystanie netto” nie działało dla ciebie - ale oto, co możesz spróbować.

Uruchom plik wsadowy z opcją net use / DELETE, aby usunąć istniejące / trwałe połączenia. Następnie możesz użyć net use z opcją / SAVECRED, aby ponownie użyć poświadczeń passowd używanych podczas ostatniego pomyślnego logowania. Nie jestem pewien, czy to rozwiąże twój problem, ale warto przyjrzeć się temu.


Nie jest to dokładnie to, czego potrzebuję, ale jest to zdecydowanie przydatna rzecz, którą należy wiedzieć. To rozwiązuje kolejny problem, który miałem.
Stephen Jennings,

2

Mam ten sam problem z wieloma połączeniami i jest sporadyczny. Podczas ponownego uruchamiania komputera czasami połączenie jest „dobre”, a czasem nie. Nie mam problemu z hasłem, ponieważ jestem w firmowej sieci LAN, ale nadal mam inny aspekt problemu.

Utworzyłem plik wsadowy o nazwie ex.bat i zapisałem go (wraz z wieloma innymi rzeczami) w katalogu \ util, który umieściłem na swojej ścieżce. Mogę wpisać „ex h:”, a to uruchomi Eksploratora Windows i ustawi go tak, aby przechodził bezpośrednio na dysk h:. Oto plik wsadowy:

start explorer /e,/select,%1

Działa to przy znacznie mniejszej liczbie naciśnięć klawiszy. Lub jeśli to na początku nie działa, naciśnij klawisz Enter, aby otworzyć folder główny h: i wyświetlić zawartość. Lub wpisz „ex h: \ sub”, gdzie istnieje podfolder „sub”.

Wydaje się, że problem ten pogorszył się ostatnio, być może z powodu jednej z poprawek zabezpieczeń systemu Windows XP.

Kolejną rzeczą do wypróbowania jest po stronie serwera. Na serwerach Windows modyfikowanie klucza rejestru ma na celu powstrzymanie serwera przed rozłączaniem się połączeń. Robię to na prawie wszystkich naszych serwerach. Plik jest:

Windows Registry Editor Version 5.00

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

Z procesu uruchamianego jako inny użytkownik start explorerdziałałby tylko wtedy, gdy obaj użytkownicy mają ustawienie „Uruchamiaj okna folderów w oddzielnym procesie”.
ivan_pozdeev

1

Miałem podobny problem i odkryłem, że mogę wymusić ponowne połączenie za pomocą prostego „dir x:” z wiersza poleceń (gdzie X: był zamapowanym, ale odłączonym dyskiem). To było z systemu Server 2003 na zmapowane dyski na XP i Win7 komputery.

Utworzyłem plik wsadowy wake_network_drives.bat z następującymi dwoma liniami:

    dir x:
    dir z:

i ustaw zaplanowane zadanie, aby uruchamiało je co noc przed awarią programu do tworzenia kopii zapasowych, ponieważ dyski były czasami wyświetlane jako odłączone.


To działa. Nawet jeśli dirpolecenie powoduje błąd, zwykle budzi odłączony dysk sieciowy. To najlepsza odpowiedź ze wszystkich.
Elliot Cameron

0

Po prostu wpisz:

NET USE H: \\server\share

(gdzie H: to oczywiście litera dysku)

Wpisz „NET /? UŻYJ ”, aby wyświetlić wszystkie opcje dostępne dla tego polecenia.


To nie działa. Litera dysku jest już zmapowana, po prostu się rozłączyła (zwykle drugi komputer był restartowany). Po uruchomieniu to skarży się, że urządzenie jest już w użyciu.
Stephen Jennings,

Tak, właśnie to przetestowałem i otrzymałem „Nazwa lokalnego urządzenia już używana”.
Stephen Jennings

1
Działa dla mnie ... ale jestem w systemie Windows 7, a dysk sam się łączy ponownie ... Spróbuj NET USE H: proste (bez ścieżki), które powinno przywrócić połączenie. Zapomniałem, jak to było w XP.
Zoran

0

Jeśli nie sprzeciwisz się trzymaniu tych haseł w postaci zwykłego tekstu we wsadzie, możesz napisać skrypt usuwania i mapowania, w tym poświadczeń.

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

Wiem, że nie spełnia twojego wymagania, aby nie usuwać udziału, ale rozwiązuje problem związany z zapamiętywaniem haseł.


Jako informatyk jestem przeciwny zarówno sobie, jak i moim użytkownikom.
ivan_pozdeev

0

Podsumowanie TL; DR: użycie net useiif exist

Podczas tworzenia nocnego skryptu kopii zapasowej napotkałem podobny problem. Musiał sprawdzić, czy komputer został włączony (za pomocą polecenia ping), wysłać magiczny pakiet, aby włączyć go w razie potrzeby (za pomocą MC-WOL ), poczekać na uruchomienie systemu Windows, a następnie nawiązać połączenie z udziałem SMB i poczekać na to być obecnym.

Podczas gdy inne odpowiedzi tutaj są świetne, nie chciałem pojawiać się / znikać zmapowanych liter dysków, ani nie odłączać niczego, z czym użytkownik może pracować, ani nie migać oknami Eksploratora. tzn. celem było zerowe rozproszenie uwagi użytkownika .

Oto fragment kodu, który może Ci pomóc:

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

Jeśli wolisz, możesz zastąpić powyższy adres IP nazwą hosta (np server1.).

net usejest potrzebne w przypadku braku istniejącego połączenia. Natknąłem się na niektóre narożne przypadki, w których samo to wydawało się niewystarczające, aby „obudzić” udział (np. Jeśli istniało wcześniejsze połączenie w stanie rozłączonym). Uważam, że if existsdyrektywa ma podobny efekt jak alternatyw wymienionych w innych odpowiedzi (jak pushd, dir, Exploreritp), ale wydawało podejście lżejszego.


0

Odpowiedź od StanZ działała dla mnie, ale musiałem być w stanie programowo określić dowolne zmapowane dyski bez statusu OK, ponieważ użytkownicy w naszej domenie otrzymują różne mapowania dysków. Napisałem tutaj, aby działała jako samodzielna wersja, która wykonuje się net useprzed i po rzeczywistym kodzie, abyś mógł zobaczyć wyniki, ale musisz tylko skopiować jedną FORinstrukcję (trzy linie) do swojego kodu, aby uzyskać pożądane wyniki.

@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

Być może stare pytanie, ale nadal aktualne w 2017 i Windows 10, ponieważ udziały sieciowe często nie są ponownie łączone lub dołączane przez system Windows z różnych powodów. W oparciu o ten problem i brak naprawdę cennego i w pełni działającego rozwiązania stworzyłem projekt Github, który zawiera zadanie harmonogramu i VBS, który rozwiązuje problem, po prostu próbując ponownie podłączyć dyski po wznowieniu lub zalogowaniu, jeśli nie jest podłączony lub online.

Skrypt jest w pełni konfigurowalny i można go skonfigurować w zależności od potrzeb rzeczywistego użytkownika.

Ścieżka do projektu Github

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.