通过 VBScript 从主机名列表中连续 ping 更新 Excel
Continuous ping with updates to Exel from list of hostnames via VBScript
以下 VBScript 将显示从主机名列表到 Excel 电子表格的单个 ping
命令的状态:
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 的实时更新不断 ping 主机名。我尝试将 -t
添加到 ping 命令 - 而不是像在命令提示符下那样添加 -n 1
,但是脚本挂起,因为它将停止在列表中的第一个主机名上,并且不会继续进一步。
我的问题:如何实现连续ping命令或者运行脚本重复?
在网上搜索了几天的解决方案,找到了none。
使用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
以下 VBScript 将显示从主机名列表到 Excel 电子表格的单个 ping
命令的状态:
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 的实时更新不断 ping 主机名。我尝试将 -t
添加到 ping 命令 - 而不是像在命令提示符下那样添加 -n 1
,但是脚本挂起,因为它将停止在列表中的第一个主机名上,并且不会继续进一步。
我的问题:如何实现连续ping命令或者运行脚本重复?
在网上搜索了几天的解决方案,找到了none。
使用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