30

Ежедневно я нахожусь в командной строке Windows, нуждающейся в доступе к сетевому диску, который сопоставлен, но отключен. Мне еще предстоит найти команду, которая будет повторно подключать этот диск без разметки и переотображения (что приводит к игре в угадывание пароля, поскольку я не владею этими компьютерами). Я также хотел бы иметь возможность написать это так, чтобы каждую ночь привод снова подключался, если он каким-либо образом отключался.

Самое быстрое решение, которое у меня сейчас есть, это:

  1. Введите « start. », Чтобы открыть проводник,
  2. Alt - D, чтобы сфокусировать адресную строку,
  3. введите нужную букву диска и нажмите клавишу ввода и дождитесь, пока она отобразит содержимое диска,
  4. затем, наконец, закройте проводник и вернитесь в командную строку.

Я знаю, что это незначительное неудобство, но я часто делаю это через медленное соединение VNC или PCAnywhere, где делать что-либо через GUI ужасно, поэтому мне просто интересно, есть ли лучшее решение.

12 ответов12

12

Может, попробовать pushd \\server\share?

7

создайте командный файл (refreshletters.cmd) с этими командами в нем

(они будут работать только внутри командного файла)

Протестировано на Win7 и XP для обновления букв «Отключено» и «Недоступно» в окне консоли (командная строка).

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

Мне нужно запустить Windows 7, прежде чем я смогу запустить программу VPN, которая соединяет меня с сетевыми дисками компании. Поэтому мои сетевые диски не переподключаются автоматически, а только открывая их в проводнике Windows, переподключают их.

Я сделал небольшой командный файл для запуска VPN, переподключения сетевых дисков и запуска некоторых приложений, которые я всегда использую.

В моем пакетном файле у меня есть следующее:

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

Команда Taskkill /fi "windowtitle eq" чувствительна к регистру!

5

Это, вероятно, глупый вопрос, но если предположить, что ваш "отключенный" диск - это H:, вы пытались просто перейти непосредственно на диск?

У меня работает под 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.
4

Я знаю, что вы сказали, что "чистое использование" не работает для вас - но вот что вы можете попробовать.

Запустите пакетный файл с параметром net use /DELETE, чтобы удалить существующие / постоянные подключения. Затем можно использовать net use с параметром / SAVECRED, чтобы повторно использовать учетные данные passowd, использованные при последнем успешном входе в систему. Я не уверен, что это решит вашу проблему, но стоит посмотреть.

2

У меня та же проблема с несколькими подключениями, и она прерывистая. Когда я перезагружаю компьютер, иногда соединение "хорошее", а иногда нет. У меня нет проблемы с паролем, так как я нахожусь в локальной сети компании, но все же у меня есть другой аспект проблемы.

Я создал пакетный файл с именем ex.bat и сохранил его (наряду со многими другими вещами) в каталоге \util, который я указал в своем пути. Я могу набрать «ex h:», и он запустит Windows Explorer и настроит его для прямого перехода на диск h:. Вот командный файл:

start explorer /e,/select,%1

Это работает, с гораздо меньшим количеством нажатий клавиш. Или, если он сначала не работает, нажмите клавишу Enter, чтобы открыть папку h: root и отобразить ее содержимое. Или введите «ex h:\sub», где существует подпапка "sub".

Эта проблема, кажется, стала намного хуже в последнее время, возможно, из-за одного из исправлений безопасности Windows XP.

Еще одна вещь, чтобы попробовать это на стороне сервера. Предполагается, что на серверах Windows изменение ключа реестра не позволяет серверу отключать соединения по тайм-ауту. Я делаю это практически на всех наших серверах. Файл:

Windows Registry Editor Version 5.00

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

У меня была похожая проблема, и я обнаружил, что могу вызвать переподключение с помощью простого «dir x:» из командной строки (где X: был подключенный, но отключенный диск). Это было из системы Server 2003 для сопоставления дисков на компьютерах XP и Win7.

Я создал командный файл wake_network_drives.bat с этими двумя строками:

    dir x:
    dir z:

и задайте запланированное задание для его запуска по ночам до сбоя программы резервного копирования, поскольку накопители иногда отображались как отключенные.

0

TL; DR сводка: использовать net use и if exist

Я столкнулся с проблемой при создании скрипта ночного резервного копирования. Он должен был проверить, включен ли компьютер (с помощью ping), отправить волшебный пакет, чтобы включить его при необходимости (с помощью MC-WOL), дождаться загрузки Windows, затем установить соединение с общим ресурсом SMB и дождаться его присутствовать.

В то время как другие ответы здесь хороши, я не хотел, чтобы отображаемые буквы дисков появлялись / исчезали из существования, не отключали что-либо, с чем пользователь мог работать, а также чтобы не вспыхивали окна Проводника. т.е. целью было нулевое отвлечение пользователя.

Вот кусок кода, который может быть полезен для вас:

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

При желании вы можете заменить вышеуказанный IP-адрес именем хоста (например, server1).

net use необходимо в случае отсутствия существующего соединения. Я столкнулся с некоторыми угловыми случаями, когда одного этого оказалось недостаточно для "пробуждения" общего ресурса (например, если ранее существовало соединение, находящееся в отключенном состоянии). Я обнаружил, что директива if exists exist имеет такой же эффект, что и альтернативы, упомянутые в других ответах (например, pushd , dir , Explorer и т.д.), Но это выглядело как более легкий подход.

0

Может быть, старый вопрос, но он все еще актуален в 2017 году и Windows 10, потому что сетевые ресурсы часто не подключаются или подключаются к Windows неправильно по разным причинам. Основываясь на этой проблеме и отсутствии реального практичного и полноценного рабочего решения, я создал проект Github, который содержит задачу планировщика и VBS, который решает проблему, просто пытаясь повторно подключить диски после возобновления или входа в систему, если он не подключен или не подключен к сети.

Скрипт полностью настраивается и может быть настроен в зависимости от потребностей реального пользователя.

Путь к проекту Github

0

Если вы не против хранить эти пароли в виде простого текста в пакете, вы можете написать сценарий удаления и переназначения, включая учетные данные.

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

Я знаю, что это не соответствует вашему требованию не удалять общий ресурс, но это решает корень проблемы запоминания паролей.

0

Просто введите:

NET USE H: \\server\share

(где H: ваша буква диска, конечно)

Тип 'NET /? USE ', чтобы увидеть все опции, которые дает эта команда.

0

Ответ от StanZ работал для меня, но я должен был иметь возможность программно определять любые подключенные диски без статуса OK, поскольку пользователи в нашем домене получают различные сопоставления дисков. Я написал здесь для запуска в качестве автономной версии, которая выполняет net use до и после фактического кода, так что вы можете видеть результаты, но вам нужно только скопировать один оператор FOR (три строки) в ваш код, чтобы получить желаемые результаты.

@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  

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .