我有以下PS代码,用于每秒钟记录ping:
ping -t google.com | Foreach{"{0} - {1}" -f (Get-Date),$_} >> filename.txt它确实每秒钟记录一次,也就是说,如果ping是140 is,那么下一个ping请求是860 is,因为我似乎每秒钟都有数据而不跳过。但是,当发生超时时,每次跳过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命令。有办法绕过这件事吗?
发布于 2021-04-14 23:15:09
您正在看到默认的数据包请求超时。默认情况下,Windows系统在ping请求超时之前等待4,000毫秒。添加一些延迟到你的脚本,你就有了它。
可以使用参数/w修改超时。
例如。这将强制超时为1秒。我想您会看到,在响应交付之前,超时间隔之后还有1秒的延迟。
ping www.google.com /w 1000
您想知道的关于windows上ping的所有信息都可以通过搜索Microsoft命令在微软的站点上找到。这将是learn.microsoft.com在列表顶部或附近的结果。
发布于 2021-04-16 18:46:08
Powershell 7有一个-timeoutseconds参数。
test-connection -TimeoutSeconds 1 microsoft.com -count 1
Destination: microsoft.com
Ping Source Address Latency BufferSize Status
(ms) (B)
---- ------ ------- ------- ---------- ------
1 DELL * * * TimedOut或者您可以在.net中进行自己的ping,并设置100毫秒的超时。
Function Get-Ping {
Param (
[parameter(ValueFromPipeline)]
[string[]]$Hostname='yahoo.com'
)
Begin {
$Ping = New-Object System.Net.Networkinformation.ping
$Timeout = 100 # ms
}
Process {
$Ping.Send($hostname, $timeout) | Add-Member -passthru hostname $hostname[0] |
select hostname,address,status,roundtriptime
}
}
get-ping microsoft.com
hostname Address Status RoundtripTime
-------- ------- ------ -------------
microsoft.com TimedOut 0https://stackoverflow.com/questions/67090996
复制相似问题