Script - Como verificar se um caminho de rede está disponível e mapeá-lo

13

Gostaria de um script de proteção de tela / logon que verifique se um caminho de rede está disponível e mapeie-o para uma unidade. Se não estiver disponível, desconecta / não conecta.

O caminho da rede é \ 192.168.1.1 \ drive1

Também preciso usar nome de usuário / senha para conectar-me a esse caminho.

FernandoSBS
fonte

Respostas:

15

Você pode usar o existcomando para verificar se o caminho é válido:

if exist \\192.168.1.1\drive1 net use s: \\192.168.1.1\drive1

Se você precisar fornecer credenciais (por exemplo, seu usuário atual do Windows não tem acesso a esse compartilhamento), adicione /user:

if exist \\192.168.1.1\drive1 net use s: \\192.168.1.1\drive1 /user:myDomain\myUser myPassword

Se houver uma chance de o compartilhamento já existir e você desejar excluí-lo, se não estiver mais disponível, adicione uma elsecláusula:

if exist \\192.168.1.1\drive1 (net use s: \\192.168.1.1\drive1) else (net use /delete s:)

E mais uma vez, adicione o /userse precisar.

Você pode unir tudo isso em um arquivo em lotes semelhante ao seguinte:

@echo off
if exist \\192.168.1.1\drive1 (set shareExists=1) else (set shareExists=0)
if exist y:\ (set driveExists=1) else (set driveExists=0)
if %shareExists%==1 if not %driveExists%==1 (net use y: \\192.168.1.1\drive1)
if %shareExists%==0 if %driveExists%==1 (net use /delete y:)
set driveExists=
set shareExists=
Geoff
fonte
ok Estou apenas colando isso no bloco de notas e salvando como .vbs, mas quando executo uma tarefa dele, dá erro Visual Basic?
FernandoSBS
1
Esse comando é um comando em lote - deve funcionar em qualquer arquivo em lote padrão.
Geoff
C: \ Windows> se existir \\ 192.168.1.1 \ volume1 (uso líquido y: \\ 192.168.1.1 \ volume1) e lse (uso líquido / exclusão y:) A conexão de rede não foi encontrada. Mais ajuda está disponível, digitando NET HELPMSG 2250.
FernandoSBS
Vou acrescentar uma edição ...
Geoff
Eu sinto Muito? (5 caracteres)
FernandoSBS
6

O Powershell facilitaria isso:

If(Test-Path \\192.168.1.1\Drive1)
  {
    net use M: \\192.168.1.1\Drive1 /user:Domain\UserName Password
  }
else {net use M: /delete > nul}
Austin T Francês
fonte
ok Estou apenas colando isso no bloco de notas e salvando como .vbs, mas quando executo uma tarefa dele, dá erro Visual Basic?
FernandoSBS
1
Salve-o como .ps1 e execute-o no Powershell.
Austin T French
não estou familiarizado com o PowerShell, como posso automatizá-lo no Agendador de Tarefas?
FernandoSBS
Você realmente deve dividir as 2 perguntas. Este é um site de controle de qualidade. Além disso, google-lo se você já não o fez: google.com/...
Austin T francês
OK, entendi. Qual o bônus de usar o PowerShell?
FernandoSBS
0

É mais simples apenas tentar mapeá-lo usando o Windows File Explorer ou usando o comando net use. Ou funciona ou não.

mdpc
fonte
Se estiver disponível, quero ser conectado automaticamente quando fizer logon / proteção de tela; caso contrário, desejo que ele seja removido das unidades mapeadas. Então, o que você sugeriu não é uma opção.
FernandoSBS
Eu não entendo, se você emitir um uso de rede, se o comando for bem-sucedido, ele será conectado. Se o comando falhar, ele será removido das unidades mapeadas. Parece simples para mim.
Mdpc
0

Este é o código final:

function run{
net use
If(Test-Path \\192.168.1.1\volume1)
  {
    if (((New-Object System.IO.DriveInfo("Y:")).DriveType -ne "NoRootDirectory")) 
        {
            "already mounted and accessible"
        }
    else
        {
            net use Y: \\192.168.1.1\volume1
            "mounting"
        }
  }
else { 
    if (((New-Object System.IO.DriveInfo("Y:")).DriveType -ne "NoRootDirectory"))
        {
            net use Y: /delete
            "removing"
        }
}
exit 4
}

run 

Eu uso Test-Path \\192.168.1.1\volume1como sugerido para verificar se o caminho da rede está disponível e ((New-Object System.IO.DriveInfo("Y:")).DriveType -ne "NoRootDirectory")para verificar se a letra da unidade existe.

FernandoSBS
fonte