通过CMD记录Ping信息

时间:2019-11-26 11:27:20

标签: powershell cmd ping

我目前遇到连接问题,我想监视某个IP地址并记录信息。

我知道我可以使用此命令(以google.com为例):

ping google.com /t |Foreach{"{0} - {1}" -f (Get-Date),$_} > pingORA.txt

在这种情况下,它将每秒记录一次ping结果。我希望它每30秒记录一次ping结果。有没有一种方法可以将其添加到上述命令中?

3 个答案:

答案 0 :(得分:0)

使用awk保存每30个ping结果,并丢弃其余的结果

awk '
BEGIN { srand();t=srand();\
while (1 ) {\
  tElapsed=srand()-t;
  if(tElapsed%30==0){\
   print("write to file from here")\
  }\
  print ("pinging google");\
  system("sleep 1");\
 }
 }'

答案 1 :(得分:0)

尽管您似乎希望使用powershell解决方案,(所以我也包含了相关标签)您仍然可以使用cmd循环在常规for中进行相同的操作:

for /f "delims=" %a in ('ping google.com -t') do echo %a >> pingORA.txt & timeout /t 30 >nul 2>&1

但是请注意,这直接来自cmd,而不是powershell

答案 2 :(得分:0)

这可以在PowerShell中使用Test-Connection完成。

$hostName = 'localhost'
$waitTime = 30
$logFile = 'pingORA.txt'
if (Test-Path -Path $logFile) { Remove-Item -Path $logFile }

while (1) {
    $p = Test-Connection -ComputerName $hostName -Count 1 -ErrorAction SilentlyContinue
    if ($null -ne $p) {
        "{0} - {1} - {2}" -f (Get-Date), $hostName, $p.ProtocolAddress |
            Out-File -FilePath $logFile -Encoding ascii -Append
    } else {
        "{0} - {1} - {2}" -f (Get-Date), $hostName, 'offline' |
            Out-File -FilePath $logFile -Encoding ascii -Append
    }

    Start-Sleep -Seconds $waitTime
}