Назад | Перейти на главную страницу

Как дождаться сети в пакетном скрипте при загрузке на Windows Server?

Я выполняю пакетный файл с помощью TaskScheduler «При запуске системы» на Windows Server 2012 в Azure, и я заметил, что в течение 20-60 секунд после запуска пакета нет сети. В настоящее время я добавил постоянное ожидание с пингом, и он работает большую часть времени, но иногда нет. Можете ли вы предложить мне более надежный способ подождать, пока сеть не станет доступной? (для отправки электронной почты и / или HTTP-запросов)

Кажется, вы намерены использовать для этого пакетную обработку, так что приступим. Возможно, вам захочется запустить это ребятами из SO, поскольку они лучшие сценаристы, чем я. Собственно, основную логику я получил из (https://stackoverflow.com/questions/21245545/ping-test-using-bat-file-trouble-with-errorlevel) с указанием причины, по которой проверка того, будет ли пинг проходить с помощью этого метода, предпочтительнее других.

@echo off

set IPaddress=%%1  REM add IP address as command line argument or just static

:TEST
ping -n 1 %IPaddress% | find "TTL=" >nul
if errorlevel 1 (
    goto RETRY
) else (
    goto DOSTUFF
)

:RETRY
ping 127.0.0.1 -n 11>nul REM waits given amount of time, set to 10 seconds
goto TEST

:DOSTUFF
do stuff REM Do stuff
exit

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

Я не кодировал IP-адрес, для которого вы хотите проверить базовое соединение ICMP, а вместо этого добавил его в качестве аргумента командной строки. Или вы можете просто его жестко запрограммировать.

Возможно, вы захотите дважды проверить синтаксис, поскольку я вообще этого не тестировал.

РЕДАКТИРОВАТЬ: изменено значение пинга на 11, чтобы отразить реальную 10-секундную задержку.

Используйте опцию «Запускать, только если это сетевое соединение доступно».

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