【发布时间】:2021-04-14 11:37:34
【问题描述】:
我有以下用于每秒记录 ping 的 PS 代码:
ping -t google.com | Foreach{"{0} - {1}" -f (Get-Date),$_} >> filename.txt
它确实记录每秒,也就是说,如果 ping 是 140 毫秒,则下一个 ping 请求在 860 毫秒内,因为我似乎有 每 秒的数据而没有跳过. 但是,当发生超时时,每次正好跳过 5 秒:
12. 4. 2021 16:13:10 - Reply from 172.217.19.110: bytes=32 time=20ms TTL=111
12. 4. 2021 16:13:11 - Reply from 172.217.19.110: bytes=32 time=79ms TTL=111
12. 4. 2021 16:13:16 - Request timed out.
12. 4. 2021 16:13:17 - Reply from 172.217.19.110: bytes=32 time=26ms TTL=111
12. 4. 2021 16:13:18 - Reply from 172.217.19.110: bytes=32 time=67ms TTL=111
很难相信每次发生这种情况时,连接丢失正好 5 秒,然后恢复;似乎超时“阻止”了新的 ping 命令。有没有办法绕过这个?
【问题讨论】:
-
你试过
ping -w 1000 -t …吗? -
Default timeout of ping 是 4 秒。考虑到这一点,我认为在下一次尝试之前看到未到达(或返回)的 ping 之间的 5 秒间隔是非常可行的。如@aschipfl 所述,您可以尝试将超时设置为 1 秒。
-
@aschipfl 将超时设置为 1000 有时会导致它“跳过” ping 命令一秒钟; 900ms 修复它。但我的问题是是否可以设置说 5000 毫秒超时,但仍然每秒执行一个 ping 请求?
-
好吧,那么您将不得不同时执行 ping,因为即使另一个可能超时,您也需要 ping,而
ping命令无法做到这一点。 -
反正我也不知道
ping到底是怎么计时的;在成功的尝试;但是,一旦 ping 尝试失败,就会考虑额外的延迟,这是所有超时的总和……
标签: powershell ping