quinta-feira, 2 de julho de 2009

Ping com data e hora

Segue um scrpit em VB para pingar com data e hora, muito útil para analises de problemas intermitentes. Salve o texto a seguir num arquivo com nome ping.vbs e utilize-o com o interpretador de vbscript no prompt comando. Veja exemplos no final do texto.

Script:
----------------------------------------------------------------
if wscript.arguments.count = 0 then
wscript.echo
wscript.echo "Retorna o resultado de um ping"
wscript.echo
wscript.echo "Sintaxe:"
wscript.echo "cscript ping.vbs <nome_estação> [opções]"
wscript.echo
wscript.echo " [/s:<tamanho do pacote>]"
wscript.echo " [/t:] ping até ser interrompido"
wscript.echo " [/r:<numero de repetições>"
wscript.echo " [/m:] mostra apenas o tempo em ms"
wscript.echo " [/i:<intervalo entre pings>]"
wscript.echo " [/f:<arquivo>]"
wscript.echo " [/d:] mostra data e hora"
wscript.echo
wscript.echo "<tamanho do pacote> : Tamanho do pacote enviado a cada ping"
wscript.echo " Valor default: 32"
wscript.echo "<numero de repetições> : Número de vezes que será repetido"
wscript.echo " Valor default: 4"
wscript.echo "<intervalo entre pings> : Tempo (em segundos) entre cada repetição"
wscript.echo " Valor default: 1s"
wscript.echo "<arquivo> : Arquivo contendo lista de hosts a serem pingados"
wscript.echo
wscript.quit(0)
end if
dim v_machine()
repetir = 4
sempre = false
ms = false
repeticao = 1
intervalo = 1000
pacote = " and buffersize=32"
datahora=false
j=0
For i = 0 to wscript.arguments.count - 1
strFlag = Left(wscript.arguments.item(i), 3)
Select Case LCase(strFlag)
Case "/t:" 'ficar repetindo até ser interrompido
sempre=true
Case "/m:" 'mostrar apenas o tempo em ms
ms=true
Case "/d:" 'mostrar data e hora
datahora=true
Case "/r:" 'Numero de repetições
repetir = int(mid(wscript.arguments.item(i),4))
Case "/i:" 'intervalo entre repetições
intervalo = int(mid(wscript.arguments.item(i),4))*1000
Case "/f:" 'arquivo
arquivo = mid(wscript.arguments.item(i),4)
Dim FSO,DataFileStream
Set FSO = CreateObject("Scripting.FileSystemObject")
Set DataFileStream = FSO.OpenTextFile(arquivo, 1)
Do While Not(DataFileStream.AtEndOfStream)
redim preserve v_machine(j)
v_machine(j) = DataFileStream.ReadLine
j = j + 1
Loop
Case "/s:" 'tamanho do pacote
pacote = " and buffersize=" & int(mid(wscript.arguments.item(i),4))
Case else
redim preserve v_machine(j)
v_machine(j) = wscript.arguments.item(i)
j = j + 1
End Select
Next
'wscript.echo ">>>" & ubound(v_machine)+1
'for i = 0 to ubound(v_machine)
' wscript.echo v_machine(i)
'next

if v_machine(0)="" then
wscript.echo "Especifique o host"
wscript.quit(0)
end if

if ms=true then
if datahora=true then
wscript.stdout.write("Data/Hora;")
end if
for i = 0 to ubound(v_machine)
wscript.stdout.write(v_machine(i))
if i <> ubound(v_machine) then
wscript.stdout.write(";")
end if
next
wscript.echo
end if

do while (repeticao <= repetir or sempre=true)
for i = 0 to ubound(v_machine)
Set objPing = GetObject("winmgmts:{impersonationLevel=impersonate}").ExecQuery("select * from Win32_PingStatus where address = '" & v_machine(i) & "'" & pacote)
For Each objStatus in objPing
if i=0 and datahora=true then
if ms=true then
wscript.stdout.write(now())
wscript.stdout.write(";")
else
wscript.echo now()
end if
end if
if ms=false then
If IsNull(objStatus.StatusCode) or objStatus.StatusCode<>0 Then
WScript.Echo("Computer " & v_machine(i) & " is not reachable")
else
wscript.stdout.write(repeticao & "-")
wscript.stdout.write("Resposta de " & objStatus.Address)
if objStatus.Address<>objStatus.ProtocolAddress then
wscript.stdout.write(" (" & objStatus.ProtocolAddress & ")")
end if
wscript.stdout.write(": bytes=" & objStatus.BufferSize)
if objStatus.ResponseTime=0 then
wscript.stdout.write(" tempo<1")
else
wscript.stdout.write(" tempo=" & objStatus.ResponseTime)
end if
wscript.stdout.write("ms TTL=" & objStatus.ResponseTimeToLive)
wscript.echo
End If
else
if isnull(objStatus.ResponseTime) then
wscript.stdout.write("Time Out")
else
wscript.stdout.write(objStatus.ResponseTime)
end if
if i <> ubound(v_machine) then
wscript.stdout.write(";")
end if
end if
Next
Next
if ms=true then
wscript.echo
else
if ubound(v_machine) <> 0 then
wscript.echo
end if

end if
repeticao = repeticao + 1
wscript.sleep(intervalo)
loop
----------------------------------------------------------------
Utilização:

- Para exibir os parâmetros, no prompt de comando digite:
                cscript ping.vbs

- Para disparar contra um endereço de forma ininterrupta com data e hora, use:
                cscript ping.vbs www.uol.com.br /t: /d:

Um comentário:

Anônimo disse...

posso testar o ping em 5000 maquinas simultaneamente em um único arquivo? Se sim como.

Postar um comentário