停止连续Ping

问题描述

我正在尝试创建Powershell脚本,其中 用户将提供带有ipaddress /主机名和测试持续时间的文本文件 •脚本应使用每个IP地址/主机名,打开cmd / powershell并运行ping测试 为此,我创建了一个包含

的蝙蝠文件
ping -t %1 |find /v ""|cmd /q /v:on /c "for /l %%a in (0) do (set "data="&set /p "data="&if defined data echo(!Date! !time! !data!)" > %2

在powershell中,我正在运行它 $ Script =“ C:\ Ping \ pingTest \ pingstat.cmd $ hostName $ outputFile” $ Runpingtest = cmd.exe / c $ script

请给我一些想法,以便根据测试持续时间发现连续的ping

解决方法

如果不通知ping过程停止,则无法停止连续ping。您需要使用ping /n COUNT进行ping操作。


但是您可以使用纯PowerShell和https://stackoverflow.com/a/60895009/5393858进行类似的操作,然后将结果导出到CSV,如下所示:

1..$pingCount | Foreach-Object {
  Test-NetConnection google.com |
    Select-Object @{
      Name='Date'
      Expression={ Get-Date -Format 'ddd MM/dd/yyyy hh:mm:ss.ff' }
    },ComputerName,SourceAddress,RemoteAddress,PingSucceeded,@{
      Name='Latency'
      Expression={ "$($_.PingReplyDetails.RoundTripTime) ms" }
    }
} | Export-Csv -NoTypeInformation C:\Path\To\file.csv

请注意,Test-NetConnection没有一个-Count参数,这就是我的上述代码将Test-NetConnection调用包装在循环中的原因。您的代码可能还需要针对您的语言环境调整Get-Date格式,因为我的代码使用了适合美国的日期格式。

还要注意,我正在使用Select-Object创建自定义DateLatency列,因为Test-NetConnection不提供其当前运行时间,并且ping延迟埋在嵌套对象中。