1

Тема: VBS: пакетный парсинг XML

Доброго времени суток уважаемые коллеги!!!

Возник такой вопрос как возможно организовать парсинг XML пакетно, и с выводом результата в текстовый файл?

Имеется локальная сеть: 192.168.1.0/24 в нее включены IP телефоны, ip адреса которых известны за ранее.
Собственно тут то и проблема: каждый конфиг телефона располагается по адресу http://IP/admin/spacfg.xml
Нужно прочитать буквально несколько тегов из этого файла:


<Connection_Type group="Info/System_Information">DHCP</Connection_Type>
<Current_IP group="Info/System_Information">192.168.1.120</Current_IP>
<Host_Name group="Info/System_Information">SEP58BFEA1192CC</Host_Name>
<Domain group="Info/System_Information">csoft.org</Domain>
<Current_Netmask group="Info/System_Information">255.255.255.0</Current_Netmask>
<Current_Gateway group="Info/System_Information">192.168.1.1</Current_Gateway>
<Primary__DNS group="Info/System_Information">192.168.1.3</Primary__DNS>
<Secondary__DNS group="Info/System_Information"/>
<Product_Name group="Info/Product_Information">SPA502G</Product_Name>
<Serial_Number group="Info/Product_Information">CCQ16421D53</Serial_Number>
<Software_Version group="Info/Product_Information">7.5.4</Software_Version>
<Hardware_Version group="Info/Product_Information">1.0.4</Hardware_Version>
<MAC_Address group="Info/Product_Information">58BFEA1192CC</MAC_Address>
...

необходимо записать в текстовый файл: ип телефона, адрес, мак адрес и серийный номер

тут то собственно и загвоздка - как это все выполнить пакетно

буду рад идеям реализации.

2

Re: VBS: пакетный парсинг XML

Space-06, они на ICMP-пакеты реагируют, на ping откликаются? Файл доступен по http любому, без каких-либо авторизаций в браузере?

3

Re: VBS: пакетный парсинг XML

на пинг откликаются, по http файл доступен без авторизации

4

Re: VBS: пакетный парсинг XML

Space-06, тогда сохраните какой-нибудь из них с помощью IE, упакуйте в архив и выложите на RGhost.

PowerShell в случае чего Вас устроит?

5

Re: VBS: пакетный парсинг XML

Образец Файла
PowerShell устроит, но если будет возможность в другом исполнении то будет здорово

6

Re: VBS: пакетный парсинг XML

PowerShell:

$oWebClient = New-Object System.Net.WebClient

'192.168.1.1', '192.168.1.5', '192.168.1.15', '192.168.1.50' | `
    ForEach-Object -Process {
        if (Test-Connection -ComputerName $_ -Count 1 -Quiet) {
            $sSourceFile = "http://$_/admin/spacfg.xml"
            $sDestFile   = "$env:temp" + "\spacfg.xml"

            $oWebClient.DownloadFile($sSourceFile, $sDestFile)

            [xml]$oXml = Get-Content -Path $sDestFile

            $sName   = $oXml.SelectSingleNode("/flat-profile/Host_Name     [@group='Info/System_Information']" ).'#text' + '.' + `
                       $oXml.SelectSingleNode("/flat-profile/Domain        [@group='Info/System_Information']" ).'#text'
            $sIP     = $oXml.SelectSingleNode("/flat-profile/Current_IP    [@group='Info/System_Information']" ).'#text'
            $sMAC    = $oXml.SelectSingleNode("/flat-profile/MAC_Address   [@group='Info/Product_Information']").'#text'
            $sSerial = $oXml.SelectSingleNode("/flat-profile/Serial_Number [@group='Info/Product_Information']").'#text'

            $sName, $sIP, $sMAC, $sSerial | Add-Content -Path "C:\Песочница\021\Destination\Out.txt" 
        }
    }

VBScript — примерно так:

Option Explicit

Dim strAddress


For Each strAddress In Array("192.168.1.1", "192.168.1.5", "192.168.1.15", "192.168.1.50")
    If IsEnabled(strAddress) Then
        With WScript.CreateObject("MSXML2.DOMDocument")
            If .load("http://" & strAddress & "/admin/spacfg.xml") Then
                WScript.Echo .SelectSingleNode("/flat-profile/Host_Name     [@group='Info/System_Information']" ).text & "." & _
                             .SelectSingleNode("/flat-profile/Domain        [@group='Info/System_Information']" ).text
                WScript.Echo .SelectSingleNode("/flat-profile/Current_IP    [@group='Info/System_Information']" ).text
                WScript.Echo .SelectSingleNode("/flat-profile/MAC_Address   [@group='Info/Product_Information']").text
                WScript.Echo .SelectSingleNode("/flat-profile/Serial_Number [@group='Info/Product_Information']").text
            Else
                WScript.Echo "Can't load [http://" & strAddress & "/admin/spacfg.xml]."
            End If
        End With
    End If
Next

WScript.Quit 0
'=============================================================================

'=============================================================================
Function IsEnabled(strAddress)
    Dim objSWbemObject
    
    IsEnabled = False
    
    For Each objSWbemObject In WScript.CreateObject("WbemScripting.SWbemLocator").ConnectServer(".", "root\cimv2").ExecQuery("SELECT * FROM Win32_PingStatus WHERE Address = '" & strAddress & "'")
        If Not IsNull(objSWbemObject.StatusCode) Then
            If objSWbemObject.StatusCode = 0 Then
                IsEnabled = True
            End If
        End If
    Next
End Function
'=============================================================================

Space-06, адрес — это что в примере?