2017-01-24 10 views
2

Следующая VBScript будет отображать состояние одной ping команды из списка хостов в таблицу Excel:Непрерывный пинг с обновлениями для Exel из списка имен хостов с помощью VBScript

Set objExcel = CreateObject("Excel.Application") 

objExcel.Visible = True 

objExcel.Workbooks.Add 

intRow = 2 


'# Define Labels 

objExcel.Cells(1, 1).Value = "Node" 

objExcel.Cells(1, 2).Value = "Status" 


'# Create file system object for reading the hosts from text file 


Set Fso = CreateObject("Scripting.FileSystemObject") 

Set InputFile = fso.OpenTextFile("MachineList.Txt") 

'# Loop thru the text file till the end 

Do While Not (InputFile.atEndOfStream) 

HostName = InputFile.ReadLine 

'# Create shell object for Pinging the host machines 

Set WshShell = WScript.CreateObject("WScript.Shell") 

Ping = WshShell.Run("ping -n 1 " & HostName, 0, True) 


objExcel.Cells(intRow, 1).Value = HostName 

'# use switch case for checking the machine updown status 

Select Case Ping 

Case 0 
    objExcel.Cells(intRow, 2).Value = "Up" 
    objExcel.Cells(intRow, 2).Interior.Color = vbGreen 
Case 1 
    objExcel.Cells(intRow, 2).Value = "Down" 
    objExcel.Cells(intRow, 2).Interior.Color = vbRed 

End Select 


intRow = intRow + 1 

Loop 

'# Format the excel 

objExcel.Range("A1:B1").Select 

objExcel.Selection.Interior.ColorIndex = 19 

objExcel.Selection.Font.ColorIndex = 11 

objExcel.Selection.Font.Bold = True 

objExcel.Cells.EntireColumn.AutoFit 

Этот код работает как задумано.

Я хочу постоянно пинговать имена хостов с живыми обновлениями в Excel. Я попытался добавить -t в команду ping - вместо -n 1, как и в командной строке, но скрипт зависает, так как он остановится на первом имени хоста в списке и не будет продвигаться дальше.

Мой вопрос: Как добиться непрерывной команды ping или запустить сценарий несколько раз?

После поиска в Интернете решения в течение нескольких дней, я не могу найти его.

+0

Вы можете использовать 'Application.OnTime' в Excel, чтобы запустить макрос в цикле с определенным интервалом времени. EDIT: поскольку вы используете vbscript, вы можете поместить свой код в цикл и добавить задержку с помощью 'WScript.Sleep()' Вам нужно будет изменить способ управления отображением результатов, хотя ... –

+0

@TimWilliams, Можете ли вы расширить концепцию цикла и сколько изменений в отображении результатов мы говорим здесь? Я выбрал идею вывода для HTML-файла позже по этой дороге развития. Я знаю, что это немного не по теме для этого вопроса, но если я должен повернуть, это направление, в которое я хотел бы войти - как записка. – Vandal

ответ

1

Использование wscript.sleep и записи результатов в текстовый файл

Dim txt, fso, InputFile, OutputFile, arr, h, Ping, sep 

Set fso = CreateObject("Scripting.FileSystemObject") 
Set WshShell = wscript.CreateObject("WScript.Shell") 

'# load the hosts from a text file into an array 
Set InputFile = fso.OpenTextFile("MachineList.Txt") 
arr = Split(InputFile.readall(), vbCrLf) 
InputFile.Close 

Do 
    txt = Now & vbcrlf 'add a timestamp 
    sep = "" 
    For Each h In arr 
     Ping = WshShell.Run("ping -n 1 " & h, 0, True) 

     txt = txt & sep & h & "," 
     If Ping = 1 Then 
      txt = txt & "Up" 
     ElseIf Ping = 0 Then 
      txt = txt & "Down" 
     Else 
      txt = txt & "???" 
     End If 
     sep = vbCrLf 
    Next 

    Set OutputFile = fso.createTextFile("Results.Txt") 
    OutputFile.write txt 
    OutputFile.Close 

    wscript.sleep 1000 * 60 '60 sec 
Loop 
+0

Как сократить время сна? Мне нужно как можно меньше. Кроме того, мне пришлось изменить «If Ping = 1 Then» to Down, и наоборот, чтобы получить правильный результат для результатов «Ping». Есть ли альтернатива для вывода, или она должна быть в .txt-файле? Если нет, я могу указать файл .html, чтобы вытащить результаты из .txt позже по дороге. – Vandal

+0

Вы можете размещать результаты везде, где захотите. Запись в текстовый файл была просто примером. Посмотрите на документы для сна - Google - это то, что вы знаете ... –