проверьте, существует ли сетевой диск, и смонтируйте его, в противном случае проверяйте, пока он не будет доступен

Мне нужна помощь в создании VBScript, чтобы сделать следующее:

Запустите службу под названием «Служба NAS PM».

net start "NAS PM service"

затем проверьте, существует ли \192.168.1.1\drive1

IF EXIST \192.168.1.1\drive1

Если это так, сопоставьте его с диском, указав логин/пароль:

net use M: \192.168.1.1\Disk_1 password /USER:admin

Если он еще не существует, подождите 10 секунд, прежде чем пытаться сопоставить его снова (до успеха).

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


person TheShadow Runner    schedule 26.03.2015    source источник


Ответы (1)


Включите обработку ошибок во время попыток подключения и продолжайте, пока вы продолжаете получать сообщение об ошибке:

Set net = CreateObject("WScript.Network")

On Error Resume Next
Do
  Err.Clear
  net.MapNetworkDrive "M:", "\\192.168.1.1\Disk_1", False, "admin", "password"
  If Err Then WScript.Sleep 10000
Loop While Err
On Error Goto 0

WScript.Echo "Drive connected."

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

Службу можно запустить через WMI следующим образом:

Set wmi = GetObject("winmgmts://./root/cimv2")

qry = "SELECT * FROM Win32_Service WHERE Name='NAS PM service' AND State='Stopped'"
For Each svc In wmi.ExecQuery(qry)
  svc.StartService
Next
person Ansgar Wiechers    schedule 26.03.2015
comment
Спасибо вам большое за ваш ответ. У меня есть еще 2 вопроса, если у вас есть немного времени: Q1. Является ли условие в вашем скрипте:: При ошибке Возобновить Далее Сделать ‹snip› Цикл Пока Err При ошибке Перейти к 0 эквивалентно: Dim k (в верхней части скрипта) ‹snip› Сделать При ошибке Возобновить Далее ‹snip› k= k+1 Цикл до Err.Number=0 ? Q2. Есть ли разница между использованием вашего метода для загрузки службы через WMI и только этим: objShell.Run (сетевой запуск службы PM NAS), 0, False ? - person TheShadow Runner; 28.03.2015
comment
@TheShadowRunner A1: Нет, фрагменты кода не эквивалентны. Тело цикла не является другой областью действия в VBScript, поэтому ваш второй пример никогда не отключает обработку ошибок. A2: Оба будут работать, но WMI является более чистым подходом. - person Ansgar Wiechers; 21.04.2015