Uma unidade de rede mapeada pode ser reconectada a partir da linha de comando?


32

Diariamente, me vejo no prompt de comando do Windows precisando acessar uma unidade de rede mapeada, mas desconectada. Ainda tenho que encontrar um comando que reconecte esta unidade sem remover o mapeamento e o remapeamento (o que leva a um jogo de adivinhação de senha, pois eu não possuo esses computadores). Também gostaria de poder criar um script para que, todas as noites, a unidade seja reconectada se for desconectada de alguma forma.

A solução mais rápida que tenho atualmente é:

  1. Digite " start." para abrir o explorer,
  2. Alt- Dpara focar a barra de endereço,
  3. digite a letra da unidade desejada e pressione enter e aguarde até que ela exiba o conteúdo da unidade,
  4. finalmente, feche o explorer e volte ao prompt de comando.

Sei que é um pequeno inconveniente, mas geralmente faço isso por meio de uma conexão lenta VNC ou PCAnywhere, onde fazer qualquer coisa por meio da GUI é horrível, por isso estou me perguntando se há uma solução melhor.


1
O que acontece quando você `dir h: \`?
wfaulk 8/10/09

3
Em vez de digitar "start <enter>." Você pode apenas fazer win-E e economizar 5 teclas digitadas ;-)
fretje

1
Eu o "resolvi" usando o caminho \\ server \ share em vez da unidade mapeada. Você pode apenas copiar arquivos, se precisar. (Esse foi o meu problema)
Peterdk

Respostas:


12

Talvez tente pushd \\server\share?


2
Não sei se é disso que preciso. Pushd parece criar letras de unidade temporárias; Eu já tenho uma letra de unidade mapeada, mas o compartilhamento está desconectado (ele possui um X vermelho no explorer e é rotulado como "Unidade de rede desconectada"). Talvez eu esteja enganado.
9139 Stephen Jennings

Sim, eu estava pensando que acessá-lo dessa maneira poderia levar a unidade a se reconectar. Você pode usar popdpara remover a letra da unidade.
Wfaulk # 8/09

Vou tentar na próxima vez que encontrar isso. Eu suspeito que ele falhará dizendo que o dispositivo está em uso ou conecte a letra da unidade errada ao compartilhamento.
9139 Stephen Jennings

2
Eu tentei isso e realmente funcionou. Primeiro, executei pushd para o compartilhamento e depois popd para remover o mapeamento da letra extra da unidade, e achei que a unidade mapeada que eu queria estava conectada novamente. Definitivamente, é um voto positivo, e se eu não receber uma resposta mais curta em alguns dias, isso será aceito.
9139 Stephen Jennings

1
Ainda não tenho capacidade de voto negativo, mas essa resposta não fez nada para mim. Veja várias postagens abaixo para ver qual foi. Também deixei um comentário lá.
prl77

8

Preciso iniciar o Windows 7 para poder executar o programa VPN que me conecta às unidades de rede da empresa. Portanto, minhas unidades de rede não se reconectam automaticamente, apenas abri-las no Windows Explorer as reconecta.

Criei um pequeno arquivo em lotes para iniciar a VPN, reconectar as unidades de rede e iniciar alguns aplicativos que eu sempre uso.

No meu arquivo em lotes, tenho o seguinte:

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

O Taskkill /fi "windowtitle eq"comando faz distinção entre maiúsculas e minúsculas!


Obrigado cara, essa foi a única resposta em todo esse tópico que me ajudou. É claro que eu votei positivamente, mas ainda não tenho capacidade para voto negativo nas postagens acima de você.
prl77

Aliás, não acho que "taskkill" tenha distinção entre maiúsculas e minúsculas, pelo menos não no Win 7 x64 com os patches mais recentes.
prl77

Nota: Se os parâmetros do taskkill acima não funcionarem, tente usar TASKLIST / FI "IMAGENAME eq explorer.exe" / V para ver qual é o título correto da janela. Minha string de filtro para TASKKILL acabou sendo "windowtitle eq c $ *"
Luke

Thx Luke pelo seu comentário. Ele realmente me ajudou
Pawel

7

crie um arquivo em lotes (refreshletters.cmd) com esses comandos

( eles funcionarão apenas dentro de um arquivo em lotes )

Testado no Win7 e XP para atualizar as letras de driver 'Desconectado' e 'Indisponível' em uma janela do console (linha de 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
          )
     )
 )

Como não conhecemos o nível de especialização do OP, pode ser uma boa ideia expandir sua resposta.
Tog

net usefunciona para mim para unidades mapeadas indisponíveis no Win7. ty
Mat M

1
Ainda não tenho capacidade de redução de votos, mas essa resposta não fez nada para mim. Veja o post abaixo de Claus Melander que fez. Também deixei um comentário lá.
prl77

1
Ele funciona (testado com win7 x64), mas depende da saída dependente do idioma net use, conforme ele procura Unavailable. Mas para um win7 alemão você começa Nicht verfgb, é necessário modificar a solução para o seu idioma
jeb

Isso funcionou para mim, exceto por um compartilhamento que tinha um espaço no caminho da rede ... Enfim, acabei fazendo algumas linhas codificadas "net use X: \\ share \ path" em um arquivo em lotes e eu manterá atualizado se eu mudar os mapeamentos de unidades. Esta é a melhor solução para mim, porque eu realmente não quero ter que abrir pop uma janela do Explorer para obter a unidade para reconectar ...
Aaron

6

Esta é provavelmente uma pergunta estúpida, mas supondo que sua unidade "desconectada" seja H :, você já tentou mudar diretamente para a unidade?

Funciona para mim no 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
O prompt de comando não permite alternar para uma unidade de rede que está desconectada no momento. Pelo menos não nas centenas de computadores em que estou usando isso (WinNT, Win2k, WinXP, WinXP Embedded).
9139 Stephen Jennings

1
Esquisito. Eu juro que funciona para mim.
Wfaulk 9/10/09

funciona para mim também!
960 Snark

Admito ter visto esse trabalho ocasionalmente, mas na maioria das vezes não. Não sei o que determina de uma maneira ou de outra, possivelmente se há ou não credenciais salvas.
10139 Stephen Jennings

1
Ah, aposto que é isso. Estou autenticando automaticamente usando minhas credenciais de domínio.
wfaulk 10/10/09

4

Eu sei que você disse que "net use" não funcionou para você - mas aqui está o que você poderia tentar.

Execute um arquivo em lotes com a opção net use / DELETE para remover as conexões existentes / persistentes. Depois, você pode usar o net use com a opção / SAVECRED para reutilizar as credenciais de senha usadas no último logon bem-sucedido. Não tenho certeza se isso resolverá o seu problema, mas vale a pena investigar.


Isso não é exatamente o que eu preciso, mas isso é definitivamente uma coisa útil a saber. Isso resolve outro problema que tive.
21139 Stephen Jennings

2

Eu tenho o mesmo problema com várias conexões e é intermitente. Quando eu reinicio o computador, às vezes a conexão é "boa" e às vezes não. Não tenho o problema da senha, pois estou na LAN da empresa, mas ainda tenho o outro aspecto do problema.

Criei um arquivo em lotes chamado ex.bat e o armazenei (junto com muitas outras coisas) em um diretório \ util que coloquei no meu caminho. Eu posso digitar "ex h:" e ele executará o Windows Explorer e o configurará para ir diretamente para a unidade h:. Aqui está o arquivo em lotes:

start explorer /e,/select,%1

Isso funciona, com muito menos pressionamentos de tecla. Ou, se não funcionar no início, pressione a tecla Enter para abrir a pasta h: root e exibir o conteúdo. Ou digite "ex h: \ sub" onde a subpasta "sub" existe.

Esse problema parece ter piorado muito recentemente, talvez devido a um dos patches de segurança do Windows XP.

Outra coisa a tentar é no lado do servidor. Nos servidores Windows, a modificação de uma chave do Registro deve impedir o servidor de desconectar suas conexões em um tempo limite. Eu faço isso em praticamente todos os nossos servidores. O arquivo é:

Windows Registry Editor Version 5.00

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

De um processo executado como outro usuário, start explorersó funcionaria se os dois usuários tivessem a configuração "Executar janelas da pasta em um processo separado".
Ivan_pozdeev 15/12/16

1

Eu tive um problema semelhante e descobri que podia forçar uma reconexão com um simples "dir x:" na linha de comando (onde X: era a unidade mapeada, mas desconectada.) Isso era de um sistema Server 2003 para unidades mapeadas no XP e Win7 computadores.

Criei um arquivo em lotes, wake_network_drives.bat, com estas duas linhas:

    dir x:
    dir z:

e defina uma tarefa agendada para executá-la todas as noites antes do programa de backup falhar, porque as unidades aparecem ocasionalmente como desconectadas.


Isso funciona. Mesmo que o dircomando dê um erro, ele tende a ativar a unidade de rede desconectada. Esta é a melhor resposta de todas.
Elliot Cameron

0

Basta digitar:

NET USE H: \\server\share

(onde H: é a letra da sua unidade, é claro)

Digite 'NET /? USE 'para ver todas as opções que este comando fornece.


Isso não funciona. A letra da unidade já está mapeada, apenas desconectada (geralmente o outro computador foi reiniciado). Quando você executa isso, reclama que o dispositivo já está em uso.
9139 Stephen Jennings

Sim, testei isso agora e recebi "O nome do dispositivo local já está em uso".
9139 Stephen Jennings

1
Funciona para mim ... mas estou no Windows 7 e, na verdade, a unidade se reconecta por si só ... Tente NET USE H: simples (sem o caminho), que deve trazer a conexão de volta. Eu esqueço como costumava ser no XP.
Zoran

0

Se você não se opõe a manter essas senhas em texto sem formatação em um lote, é possível criar um script para excluir e remapear, incluindo credenciais.

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

Sei que ele não atende ao seu requisito de não excluir o compartilhamento, mas resolve a raiz do problema de ter que lembrar senhas.


Como profissional de TI, sou contra, tanto para mim quanto para meus usuários.
Ivan_pozdeev 15/12/16

0

Resumo de TL; DR: uso net useeif exist

Encontrei um problema relacionado ao criar um script de backup noturno. Ele precisava verificar se um computador estava ligado (usando ping), enviar um pacote mágico para ligá-lo, se necessário (usando MC-WOL ), aguardar a inicialização do Windows, estabelecer uma conexão com um compartilhamento SMB e esperar por ele. estar presente.

Embora outras respostas aqui sejam ótimas, eu não queria que as letras de unidades mapeadas aparecessem / não existissem, ou desconectassem qualquer coisa com a qual o usuário estivesse trabalhando, nem as janelas do Explorer piscassem. ou seja, uma meta era zero distração do usuário .

Aqui está um pedaço de código que pode ser útil para você:

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 preferir, você pode substituir o endereço IP acima por um nome de host (por exemplo server1).

net useé necessário caso nenhuma conexão existente esteja presente. Eu me deparei com alguns casos de canto em que apenas ele parecia insuficiente para "ativar" o compartilhamento (por exemplo, se houvesse uma conexão anterior em um estado desconectado). Eu encontrei a if existsdirectiva tem um efeito semelhante como as alternativas mencionadas em outras respostas (como pushd, dir, Explorer, etc), mas parecia uma abordagem mais leve.


0

A resposta do StanZ funcionou para mim, mas eu tinha que ser capaz de determinar programaticamente quaisquer unidades mapeadas sem o status OK, pois os usuários em nosso domínio recebem mapeamentos de unidades diferentes. Eu codifiquei aqui para executar como uma versão autônoma, que é executada net useantes e depois do código real, para que você possa ver os resultados, mas você só precisa copiar a FORinstrução (três linhas) no seu código para obter os resultados desejados.

@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

Talvez seja uma pergunta antiga, mas ainda relevante em 2017 e no Windows 10, porque os compartilhamentos de rede geralmente não são reconectados ou anexados corretamente pelo Windows por diferentes motivos. Com base nesse problema e na ausência de uma solução real e viável e funcional, criei um projeto no Github que contém uma Tarefa do Agendador e um VBS que resolve o problema, simplesmente tentando reconectar as unidades após o reinício ou o logon, se não estiver conectado ou online.

O script é totalmente configurável e pode ser configurado dependendo das necessidades do usuário real.

Caminho para o projeto Github

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.