在 Windows Server 上启动时如何在批处理脚本中等待网络?

在 Windows Server 上启动时如何在批处理脚本中等待网络?

我在 Azure 中的 Windows Server 2012 上使用 TaskScheduler“在系统启动时”执行批处理文件,我发现批处理启动后 20-60 秒内没有网络。目前我添加了一个使用 ping 的持续等待,它大多数时候都有效,但有时无效。您能建议我一种更可靠的方法来等待网络可用吗?(用于发送电子邮件和/或 http 请求)

答案1

您似乎打算使用批处理来完成此操作,因此请继续。您可能希望让 SO 的人员来运行此操作,因为他们比我更擅长编写脚本。事实上,我从 (https://stackoverflow.com/questions/21245545/ping-test-using-bat-file-trouble-with-errorlevel) 并详细说明为什么使用此方法测试 ping 是否能通过优于其他方法的原因。

@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

基本上,它只是以一秒为间隔发出 ping 指令,检查 ping 是否成功。如果成功,它就会执行您编写的脚本。

我没有对您想要检查基本 ICMP 连通性的 IP 地址进行硬编码,而是将其添加为命令行参数。或者您也可以直接对其进行硬编码。

您可能需要仔细检查语法,因为我根本没有测试过这一点。

编辑:将 ping 值更改为 11 以反映真正的 10 秒延迟。

答案2

使用“仅当此网络连接可用时启动”选项。 在此处输入图片描述

答案3

根据超级用户的这个答案,您可以将计划任务订阅到“网络可用”事件。
只要您不针对特定网络进行过滤,我认为它应该可以工作。

相关内容