
Cikkünkhöz mellékeltük az alábbi szkriptet "ping.vbs" néven. Indítása a parancssori CSCRIPT.EXE-vel javasolt a sok felbukkanó ablak elkerülése végett. Könnyítésként írtunk egy batch fájlt, ami ellátja ezt a feladatot.
Az új osztály neve: Win32_PingStatus. Feladata, hogy ICMP üzenetek küldésével mérje a válaszidőket. Ha nem érkezik válasz, a célgép nem elérhető, tűzfal mögött helyezkedik el és blokkolva van az ilyen irányú forgalom vagy nincs telepítve a TCP/IP protokoll. Ha érkezik válasz, de lassan, akkor valószínűleg valamilyen hálózati hibával vagy túlterheltséggel kell számolnunk.
Készítsünk egy szkriptet, amelyben a megadott gépeket "megpingeljük", mérjük a válaszidőket és a végén készítünk egy egyszerű statisztikát, hogy hány gép volt elérhető és mennyi nem. A szkript jól használható kisebb hálózatok gyors teszteléséhez.
Elsőként adjuk meg az ellenőrizendő gépek neveit, pontosvesszővel elválasztva.
ComputerList= "localhost;dorothy;zeusz"
A "Split" függvénnyel bontsuk fel az előző sztringet gépnevekre, második paraméterként az elválasztó karaktert kell megadni.
aComputer = split(ComputerList, ";")
Inicializálunk két változót: az egyik (yes) fogja tárolni a sikeresen elért gépek számát, a másik (no), pedig a nem elérhetőkét.
Egy ciklussal végignézzük az összes megadott gépet. Meghívjuk a Win32_PingStatus osztályt és lekérjük az összes gép ping statisztikáját. A kérés címe az "address" tulajdonság, ami lehet gépnév és IP cím is.
For Each Computer in aComputer
Set objPing = GetObject("winmgmts:{impersonationLevel=impersonate}").ExecQuery("select * from Win32_PingStatus where address = '" & Computer & "'")
Következik még egy ciklus az adatok feldolgozására. Ha a "StatusCode" tulajdonságban nem nulla érték szerepel vagy nincs értéke (IsNull), akkor valamilyen hiba lépett fel. Ekkor növeljük a "no" változó értékét: a gép nem elérhető.
For Each objStatus in objPing
If IsNull(objStatus.StatusCode) or objStatus.StatusCode <> 0 Then
WScript.Echo Computer & " nem elérhető"
no=no+1
Ellenkező esetben válaszolt a célgép a ping parancsra. Írassuk ki a válaszidőt milliszekundumban. Ez a "ResponseTime" tulajdonságban tárolódik. Végül növeljük a "yes" változó értékét.
else
WScript.Echo Computer & " válasz:" & objStatus.ResponseTime & " ms OK"
yes=yes+1
end If
Next
Next
Jelenítsük meg a statisztikát: összesen annyi gépet ellenőriztünk, amennyi a "yes" és "no" változók összege. Ebből sikeresen válaszolt a "yes"-ben szereplő számú gép és sikertelenül a "no"-ban szereplők.
WScript.Echo "------ Statisztika -------"
WScript.Echo "Ellenőrizve: " & yes+no
WScript.Echo "Válaszolt: " & yes
WScript.Echo "Nem válaszolt: " & no