Existe uma maneira de "desconectar" uma unidade de rede mapeada, mas NÃO remover o mapeamento?


12

Por exemplo, quando eu digito net use, vejo algo como:

Status        Local       Remote
OK            H:          \\server\home folders\me
Unavailable   I:          \\serverA\share1
Disconnected  J:          \\serverB\share2
Reconnecting  K:          \\serverC\share3

Quando isso acontece, o Windows Explorer tem atrasos de 10 a 20 segundos ao fazer algo tão simples quanto criar uma nova pasta na minha unidade C :. Depois de um tempo, o drive K: mudará para dizer "Desconectado".

O que eu quero fazer é forçar de alguma forma a unidade K: a ser desconectada ou indisponível, mas sem perder o mapeamento autenticado.


2
Por curiosidade, por que você acha que precisa disso?
Zoredache

2
Eu me conecto a uma VPN, uso a unidade K: e desconecto a VPN. Depois disso, meu Explorer geralmente fica lento, até finalmente marcar K: como desconectado. Isso é uma simplificação, pois tenho mais de três mapeamentos de unidades necessários para vários scripts e posso conectar / desconectar da VPN várias vezes ao dia.
Glen Little

1
@GlenLittle Você tentou desmarcar a opção "reconectar ao fazer logon" ao mapear a unidade?
Moses

4
Por que não criar um script para conectar e desconectar as unidades (incluindo a remoção do mapeamento). Como aqui Você pode até mesmo criar um script que se conectar à VPN automaticamente e um script para desconexão (incluindo todo o material da unidade de mapeamento)
Rik

4
Um net use \\serverB\share2 /deletedeve fazer o truque (ele desconecta a unidade, mas não aflige o mapeamento)
Paolo Gibellini

Respostas:


1

A Microsoft parece estar tentando mover tarefas administrativas como essa para o PowerShell.

No seu caso específico, o cmdlet a ser usado é o Remove-PSDrive. O Remove-PSDrive fará exatamente o que você está pedindo: desconecte uma unidade de rede mapeada. A sintaxe para o seu cenário seria:

Remove-PSDrive -Nome K

Para chegar a uma linha de comando do PowerShell em que você pode executar esse cmdlet, abra o menu Iniciar e, na caixa de pesquisa, digite apenas PowerShell. Se você não tiver a caixa de pesquisa, no menu Iniciar, selecione Executar e, na caixa de execução, digite PowerShell e pressione Enter.

Para obter detalhes completos sobre como usar esse cmdlet, incluindo todas as opções, consulte o artigo técnico da Microsoft:
http://technet.microsoft.com/en-us/library/hh849760.aspx


Parecia muito promissor, mas não funciona para mim. Se fizer isso net use y: ...., inicie o PowerShell e faça get-psdrive, como Ylistado. Fazendo remove-psdrive -Name Yremove. Mas então net useainda aparece, e ainda posso usar a unidade Y: (Isso estava usando o PS v2. Aparentemente funciona com a v4.)
Glen Little

PowerShell 4.0 foi lançado um par de semanas atrás ... technet.microsoft.com/en-us/library/hh847820.aspx
Glen Little

@GlenLittle Mas isso remove a letra da unidade ou a desconecta enquanto mantém a letra? Se o remover, não é o mesmo que net use Y: /delete?
Rik

Finalmente capaz de experimentá-lo. Infelizmente, isso parece imitar o Net use /deleteque o @Rik adivinhou. Não vejo diferença, no que diz respeito às unidades de rede.
Glen Little

1

Está bem. Eu posso ter uma solução. Eu tentei olhar para o /savecredparâmetro de, net usemas não consegui fazê-lo funcionar corretamente, então aqui está outra abordagem:

Seu problema foi o atraso com o Explorer após a desconexão com a VPN.
Então, por que não ocultar as unidades do Explorer após a desconexão, para não tentar acessá-las.

Há uma chave do Registro para ocultar unidades do Explorer:

HKEY_xxx\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\NoDrives

e HKEY_xxx podem ser HKEY_LOCAL_MACHINEe HKEY_CURRENT_USER.

Abaixo deste post, há um resumo de qual valor NoDrivesdeve conter.
(adicione os números para as unidades).


Criei um pequeno arquivo de lote em que você não precisa fazer os cálculos sozinho.
É um arquivo de lote 'alternar'.

Execute-o uma vez para conectar-se à sua "Minha VPN".
Executá-lo novamente para desconexão e ocultar as unidades I, J e K .

Você pode facilmente dividir isso em dois arquivos de lote, mas você entende o ponto ... Você também pode simplificar esse arquivo de lote se definir o seu número em NoDrivesvez de permitir que o lote faça o cálculo.

Isso precisa ser executado como administrador. (é possível elevar automaticamente, mas isso é muito avançado)

Se você conceder a si mesmo permissão na chave NoDrivesque você não tem que executar este como administrador. Basta abrir regedit.exe, navegue até essa chave e clique em "Editar> Permissões" e conceda a si mesmo "Controle total" sobre essa chave.

@echo off
:: ------------------------
set MyVPN="My VPN"
:: ------------------------
rasdial | findstr %MyVPN% 1>nul
If %ERRORLEVEL% == 0 goto disconnect

:connect
echo ============================================================
echo connecting to %MyVPN%
echo ============================================================
rasdial %MyVPN%
:: This is easy. We just set 0 in NoDrives
reg add HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer /v NoDrives /T REG_DWORD /d 0 /f

goto :end

:disconnect
echo ============================================================
echo disconnecting from %MyVPN%
echo ============================================================
rasdial %MyVPN% /disconnect

:: ------------------------------------------------------------------
:: This is harder. We need to determine what value NoDrives should be
:: ------------------------------------------------------------------
Setlocal EnableDelayedExpansion

:: ------------------------
:: Set here your VPN drives
:: ------------------------
set drives='I J K'

:: ------------------------
:: Calculation to determine the value
:: ------------------------
set drive_value=1
set NoDrives=0
for %%c in (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) do (
  echo.%drives% | findstr "%%c" 1>nul
  if !ERRORLEVEL! == 0 set /a NoDrives+=drive_value
  set /a drive_value="drive_value<<1"
)
echo Seting NoDrives to %NoDrives%
reg add HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer /v NoDrives /T REG_DWORD /d %NoDrives% /f
endlocal

:end
pause

Nota: O
Windows Explorer precisa ser fechado e aberto novamente antes que as unidades sejam ocultadas (ou visíveis novamente).


Configurações para NoDrives:

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\NoDrives
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\NoDrives

     Decimal       Hex
A:         1         1
B:         2         2
C:         4         4
D:         8         8
E:        16        10
F:        32        20
G:        64        40
H:       128        80
I:       256       100
J:       512       200
K:      1024       400
L:      2048       800
M:      4096      1000
N:      8192      2000
O:     16384      4000
P:     32768      8000
Q:     65536     10000
R:    131072     20000
S:    262144     40000
T:    524288     80000
U:   1048576    100000
V:   2097152    200000
W:   4194304    400000
X:   8388608    800000
Y:  16777216   1000000 
Z:  33554432   2000000 

Parece interessante ... Vou ter que tentar isso. Adoro o uso de matemática bit a bit no arquivo em lotes!
Glen Little

0

Não sei como fazer isso, mas criaria um script para adicionar a unidade mapeada para facilitar a vida.

  1. Crie um arquivo com a extensão .bat (por exemplo, map_drives.bat)
  2. Dentro do arquivo, adicione uma linha como esta net use J: \\server\folder
  3. Clique duas vezes nesse arquivo e ele mapeará sua unidade

Obrigado pela resposta. Eu faria isso, mas algumas unidades precisam de autenticações de id / pw diferentes e não quero colocá-las em um script.
Glen Little
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.