使用portqry批量查询端口状态.转载请著名作者.

 文件夹结构如下, portqry即为proqry.vbs. 最好放在没有空格的路径下, 例如c:\portqry\
PortQry可以在microsoft上下载.
List.csv为必须的原始数据文件, 格式如下,可自行编辑.
127.0.0.1,135,udp
58.2.234.123,139,tcp

脚本如下
 
'=======================================================
'Create by Xu Rui
'=======================================================
 
'On Error Resume Next
 
Set oWshShell = WScript.CreateObject("WScript.Shell")
strHead = "IP/Host,Type/Port,Status"
 
strCurrentDir = oWshShell.CurrentDirectory
strList = strCurrentDir&"\"&"List.csv"
strBatFile = strCurrentDir&"\"&"query.bat"
strTempFileName = "temp.temp"
strOutputFile = strCurrentDir&"\"&"PortQuery_"&Year(Now)&Month(Now)&Day(Now)&Hour(Now)&Minute(Now)&Second(Now)&".csv"
 
 
Set objFSO = CreateObject("Scripting.FileSystemObject")
If objFSO.FileExists(strList) Then
WriteFile strOutputFile,strHead
Set objFile = objFSO.OpenTextFile(strList, 1)
Do Until objFile.AtEndOfStream
strComputer = Trim(objFile.ReadLine)
'wscript.echo strComputer
MyArray = Split(strComputer,",")
Main MyArray(0),MyArray(1),MyArray(2)
Loop
objFile.Close
Else
Wscript.Echo "Can not find "&strList
End If
 
Wscript.Echo "Execute finished, please check "&strOutputFile
set objFSO = nothing
set oWshShell = nothing
'==============================================================
Function Main(strIP,intPort,strPortType)
strBatBody = "@echo off"&vbCRLF
strBatBody = strBatBody&":Top"&vbCRLF
strBatBody = strBatBody&"Echo "&strIP&">"&strTempFileName&vbCRLF
strBatBody = strBatBody&"Echo "&strPortType&"/"&intPort&">>"&strTempFileName&vbCRLF
strBatBody = strBatBody&"portqry -n "&strIP&" -e "&intPort&" -p "&strPortType&" -q"&vbCRLF
strBatBody = strBatBody&"if errorlevel = 2 goto filtered"&vbCRLF
strBatBody = strBatBody&"if errorlevel = 1 goto failed"&vbCRLF
strBatBody = strBatBody&"if errorlevel = 0 goto success"&vbCRLF
strBatBody = strBatBody&"goto end"&vbCRLF
strBatBody = strBatBody&":filtered"&vbCRLF
strBatBody = strBatBody&"Echo listening or filtered>>"&strTempFileName&vbCRLF
strBatBody = strBatBody&"goto end"&vbCRLF
strBatBody = strBatBody&":failed"&vbCRLF
strBatBody = strBatBody&"Echo not listening>>"&strTempFileName&vbCRLF
strBatBody = strBatBody&"goto end"&vbCRLF
strBatBody = strBatBody&":success"&vbCRLF
strBatBody = strBatBody&"Echo listening>>"&strTempFileName&vbCRLF
strBatBody = strBatBody&"goto end"&vbCRLF
strBatBody = strBatBody&":end"
'wscript.echo strBatBody
 
WriteFile strBatFile,strBatBody
 
a=oWshShell.Run ("cmd /c "&strBatFile,0,true)
 
Set objFileTmp = objFSO.OpenTextFile(strCurrentDir&"\"&strTempFileName, 1)
For i = 1 to 3 
strOutBady = strOutBady&","&Trim(objFileTmp.ReadLine)
Next
objFileTmp.Close
 
strOutBady=Trim(right(strOutBady,len(strOutBady)-1))
WriteFile strOutputFile,strOutBady
 
objFSO.DeleteFile(strBatFile)
objFSO.DeleteFile(strCurrentDir&"\"&strTempFileName)
 
End Function
'==============================================================
Function WriteFile(FilePath,strBody)
If objFSO.FileExists(FilePath)=false then objFSO.CreateTextFile(FilePath)
Set objOutPutFile = objFSO.OpenTextFile(FilePath, 8)
objOutPutFile.WriteLine strBody
objOutPutFile.Close
Set objOutPutFile = nothing
End Function
'==============================================================