【问题标题】:Netstat with WMI and VBScript带有 WMI 和 VBScript 的 Netstat
【发布时间】:2012-05-22 16:46:16
【问题描述】:

我正在处理一个需要修改用于网络文档的脚本的项目。我们使用的当前脚本是 SYDI 的修改版本,found here。我想做的是向这个脚本添加执行 netstat -an 的能力,并让它与报告的其余部分一起返回。我很好奇是否有人使用 WMI 和 VBScript 来返回 netstat 信息,以及如何将其合并到此脚本中。

注意:我不是想推销产品,也不隶属于 SYDI 项目。

【问题讨论】:

    标签: scripting vbscript wmi wmi-query netstat


    【解决方案1】:

    您可以像下面的脚本一样运行 netstat 并捕获结果,但也可以从 activeX 获得很多信息,但我需要知道您确切需要哪些信息。

    set sh = CreateObject("Wscript.Shell") 
    set Connections = CreateObject("Scripting.Dictionary") 
    
    call Main() 
    
    Function Main() 
        call GetConnections() 
        call ProcessConnections() 
    End Function 
    
    Function GetConnections() 
        i = 0 
        set shExec = sh.Exec("netstat -f") 
    
        Do While Not shExec.StdOut.AtEndOfStream 
            Line = shExec.StdOut.ReadLine() 
            If Instr(Line, "TCP") <> 0 Then 
                Set Connection = New NetworkConnection 
                Connection.ParseText(Line) 
                call Connections.Add(i, Connection) 
                i = i + 1 
            End If 
        Loop 
    End Function 
    
    Function ProcessConnections() 
        For Each ConnectionID in Connections.Keys 
            wscript.echo ConnectionID & Connections(ConnectionID).RemoteIP 
        Next 
    End Function 
    
    Class NetworkConnection 
        Public Protocol 
        Public LocalIP 
        Public LocalPort 
        Public RemoteIP 
        Public RemotePort 
    
        Public Sub ParseText(Line) 
            dim i 
    
            For i = 5 to 2 Step -1 
                Line = Replace(Line, String(i, " "), " ") 
            Next 
    
            Line = Replace(Line, ":", " ") 
            Line = Right(Line, Len(Line) - 1) 
            Line = Split(Line, " ") 
    
            Protocol = Line(0) 
            LocalIP = Line(1) 
            LocalPort = Line(2) 
            RemoteIP = Line(3) 
            RemotePort = Line(4) 
    
        End Sub 
    
        Private Sub Class_Initialize 
            'MsgBox "Initialized NetworkConnection object" 
        End Sub 
    
    End Class
    

    编辑:根据此处 OP 的评论,简化版本

    set sh = CreateObject("Wscript.Shell")  
    call GetConnections()  
    
    Function GetConnections()  
      i = 0  
      set shExec = sh.Exec("netstat -an")  
       Do While Not shExec.StdOut.AtEndOfStream  
          Wscript.Echo shExec.StdOut.ReadLine()  
      Loop  
    End Function  
    

    【讨论】:

    • 我想要 netstat -an 命令的完整输出。也就是说,我希望看到协议、本地地址、外国地址和州的完整列表。理想情况下,这将被输出到一个类似于他们在运行命令时可以从命令行看到的表中。感谢您的想法和示例以及您的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多