我目前遇到连接问题,我想监视某个IP地址并记录信息。
我知道我可以使用此命令(以google.com为例):
ping google.com /t |Foreach{"{0} - {1}" -f (Get-Date),$_} > pingORA.txt
在这种情况下,它将每秒记录一次ping结果。我希望它每30秒记录一次ping结果。有没有一种方法可以将其添加到上述命令中?
答案 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
}