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