Visual Basic脚本:如果需要的时间比我需要的更长,有没有办法停止Exec

时间:2014-05-02 05:27:52

标签: vbscript

所以说实话,我正在尝试创建一个ping扫描工具,告诉我使用可视化基本脚本在线的设备。如果ping命令运行时间超过.25-.5秒(基本上没有响应),我不知道如何停止ping命令。最终目标是创建一个脚本,扫描范围内的所有255个IP地址,让我知道哪些是活着的,并尽快在文档中显示它们。我当前的脚本很慢,如果没有收到响应,我想跳过ip地址的完整ping。我知道有一百万种方法可以做到这一点,但对于我自己的娱乐目的,我想创造自己的。额外奖励:我计划在某个时刻现场显示这些数据,并希望得到一些帮助。不要为我做一切。我自己学习这个,而且为我这样做的人对我没有任何好处。我只想指出正确的方向。这是一个自我指定的项目。

 Dim x, prompt, title, DefaultValue ' Declare 
prompt = "Please enter the first 3 octets of the Ip range you wish to scan in the format    of XXX.XXX.XXX."
 title = "Quick ping scan"
 DefaultValue = "192.168.1."
UserEntry = InputBox(prompt, title, DefaultValue)
pingscan = "ping -n 1 "
Set start = WScript.CreateObject ("WScript.Shell")
If (UserEntry = "") Then
prompt = "Please enter a valid ip address"
title = "Quick ping scan"
UserEntry = InputBox(prompt, title, DefaultValue)
Else
End If
for x = 1 to 255
Set finalvalue = (start.Exec("ping -n 1 "&UserEntry &x))
Set Output = CreateObject("Scripting.FileSystemObject").OpenTextFile(".\PS_results.txt",8,true)
strOutput = finalvalue.StdOut.ReadAll
If ((InStr(1, strOutput, "bytes=32")) = "71") Then
Output.WriteLine strOutput
Else 
End If
Output.close
Next
result = MsgBox ("Ping Scan is finished. Do you want to open the file?",vbYesNo+vbInformation, "")
If(result="6") Then
    start.Exec("notepad .\PS_results.txt")
ElseIf(result="7") Then
    WScript.Echo "Ping Scan is complete"
    End If

1 个答案:

答案 0 :(得分:0)

我会给你一个命令提示符命令。 vbs中提供了相同的对象,我将为您提供有关如何访问对象的示例。

wmic /node:@"c:\SomeFileFilledWithComputernamesWithoutSlashesOrIPAddresses.txt /failfast:on computersystem get caption /format:list >serversonline.txt

尝试/格式:列表,表格,CSV,Hform(html列表)和HTable。如果使用h格式,则使输出成为htm文件。

/ failfast:on表示如果它没有回答它没有等待它(在所有计算机通常快速回答之后)。

/ node执行类似

的操作
serenity
trigger
127.0.0.1
129.6.87.23

这是如何在vbs中访问wmi对象(但命令提示符更容易)。

Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")

Set colItems = objWMIService.ExecQuery("Select * From Win32_Process")

For Each objItem in colItems
    msgbox objItem.ProcessID & " " & objItem.Caption
Next

\\。\,点是计算机名称。 。意味着本地计算机要做127.0.0.1

    Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\127.0.0.1\root\cimv2")