Windows - TCP/IP beállítások lekérdezése a hálózat összes gépéről - központilag

forráskód letöltése
Rendszergazda és szembesült már azzal a feladattal, hogy a hálózat összes gépének IP címét, gépnevét és egyéb TCP/IP beállításait össze kellett gyűjtenie? Az összes gép egyenkénti ellenőrzése a legrosszabb megoldás. Sokkal hatékonyabb a Windows Scripting Host (WSH) nyújtotta lehetőségekkel, egyetlen központi gépről egy szkript futtatásával hozzájutni az összes adathoz.
Futtatás előtt a mellékelt szkript 2. sorában módosítsuk a "Domain" változó tartalmát a helyi munkacsoport vagy tartomány nevét beírva.
Alapvető feltételek
Két nagyon fontos dolog:
Az egyik, hogy minden ellenőrizendő gép legyen bekapcsolva és a központi gépről (amelyiken a szkriptet futtatjuk) legyen hálózaton keresztül elérhető.
Továbbá a szkriptet futtató felhasználónak rendszergazdai jogosultsággal kell rendelkeznie az összes gépen, ugyanazzal a névvel és jelszóval, amivel pillanatnyilag be van jelentkezve. Ha ez a feltétel nem teljesül, a kapott eredmény hibás lesz, többször jelennek meg ugyanazok az adatok.
Nem elhanyagolható az a tény sem, hogy a Windows Management Instrumentation (WMI) osztályainak lekérdezését hajtjuk végre, így DOS, Win9x, Linux, Novell, stb. operációs rendszereket futtató gépek beállításairól nem kapunk tájékoztatást. Windows 2000-től kezdve viszont rendelkezésre áll minden szoftveres feltétel a sikeres végrehajtáshoz.
A szkript
Vágjunk rögtön bele a szkript megírásába:
Előfordulhat, hogy a hálózatban van egy olyan gép, melyről nem tudjuk lekérni az adatokat. Hozzáférési jogosultságunk ugyan van, de az operációs rendszere nem támogatja az alábbi WMI műveleteket. Ilyenkor "megakadhat" a szkript futtatása. A következő sorral elérhetjük, hogy maradjanak figyelmen kívül a hibák és minden esetben fusson le a teljes forráskód.
on error resume next
Adjuk meg annak a munkacsoportnak vagy tartománynak a nevét, ahol a lekérdezendő gépek vannak.
Domain="Munkacsoport"
Szükségünk van az összes elérhető gép nevére. A "WinNT" interfész + munkacsoportnév objektumlistából szűrjük ki a számítógépeket.
Set OnlyDomain=GetObject("WinNT://" + Domain)
OnlyDomain.Filter=Array("computer")
Indítsunk egy ciklust és minden gépen futtassuk a törzsben lévő kódot.
 For Each Computer in OnlyDomain
Az "oText" szöveges változóba fogjuk tárolni gépenként a lekérdezett adatokat, ezért elsőként nullázzuk ki a tartalmát.
oText = ""
A "ComputerName" változó tartalma legyen a "WinNT" interfész adott objektumának (egy számítógép), "Name" tulajdonsága. Ez mindig egy gépnév.
ComputerName = Computer.Name
Kapcsolódjuk a WMI szolgáltatás "Win32_NetworkAdapterConfiguration" osztályához, de csak azokra a hálózati kapcsolatokra van szükségünk, ahol van érvényes IP cím (Where IPEnabled = True). Mindez az aktuálisan bejelentkezett felhasználó nevével és jelszavával történik, ezért fontos, hogy minden gépen érvényes legyen.
Set objWMIService = GetObject ("winmgmts:" & "!\\" & ComputerName & "\root\cimv2")
Set colAdapters = objWMIService.ExecQuery ("Select * from Win32_NetworkAdapterConfiguration Where IPEnabled = True")
Tároljuk el az "oText" változóba a lekérdezett adatokat és minden sor végét zárjuk le (chr (10) & chr (13)), hogy a következő adat új sorba kerüljön.
For Each objAdapter in colAdapters
    oText = oText + "Gépnév: " & objAdapter.DNSHostName & chr (10) & chr (13)
    oText = oText + "DNS domain: " & objAdapter.DNSDomain & chr (10) & chr (13)
    oText = oText + "DNS utótag keresési lista: " & objAdapter.DNSDomainSuffixSearchOrder & chr (10) & chr (13)
    oText = oText + "Megjegyzés: " & objAdapter.Description & chr (10) & chr (13)
    oText = oText + "MAC cím: " & objAdapter.MACAddress & chr (10) & chr (13)
    oText = oText + "DHCP engedélyezve: " & objAdapter.DHCPEnabled & chr (10) & chr (13)
Egy hálózati adapterhez több IP cím is tartozhat, ezért szükség van még egy ciklusra.
    If Not IsNull(objAdapter.IPAddress) Then
        For i = LBound(objAdapter.IPAddress) To UBound(objAdapter.IPAddress)
            oText = oText + "IP cím: " & objAdapter.IPAddress(i) & chr (10) & chr (13)
        Next
    End If
Ugyanígy az alhálózati maszkoknál is.
    If Not IsNull(objAdapter.IPSubnet) Then
        For i = LBound(objAdapter.IPSubnet) To UBound(objAdapter.IPSubnet)
            oText = oText + "Alhálózat: " & objAdapter.IPSubnet(i) & chr (10) & chr (13)
        Next
    End If
Az alapértelmezett átjárónál.
If Not IsNull(objAdapter.DefaultIPGateway) Then
        For i = LBound(objAdapter.DefaultIPGateway) To UBound(objAdapter.DefaultIPGateway)
            oText = oText + "Alapértelmezett átjáró: " & objAdapter.DefaultIPGateway(i) & chr (10) & chr (13)
        Next
    End If
    oText = oText + "DHCP szerver: " & objAdapter.DHCPServer
A DNS szervernél.
If Not IsNull(objAdapter.DNSServerSearchOrder) Then
        For i = LBound(objAdapter.DNSServerSearchOrder) To UBound(objAdapter.DNSServerSearchOrder)
            oText = oText + "DNS szerver: " & objAdapter.DNSServerSearchOrder(i) & chr (10) & chr (13)
        Next
    End If
Végül hozzáadjuk a maradék néhány tulajdonságot is.
    oText = oText + "Elsődleges WINS szerver: " & objAdapter.WINSPrimaryServer & chr (10) & chr (13)
    oText = oText + "Másodlagos WINS szerver: " & objAdapter.WINSSecondaryServer & chr (10) & chr (13)
    oText = oText + "Címbérlet kezdete: " & objAdapter.DHCPLeaseObtained & chr (10) & chr (13)
    oText = oText + "Címbérlet lejárta: " & objAdapter.DHCPLeaseExpires & chr (10) & chr (13)
Next
Majd az egészet megjelenítjük a képernyőn. Ha a ciklus ezen pontján íratjuk ki, akkor minden gép külön ablakban egymás után lesz látható.
wscript.echo oText
Next
A szkript zárásaként írassuk ki a "Kész." szót, így tudjuk, mikor futott le. Erre azért van szükség, mert az egyes gépek elérése hosszabb - rövidebb ideig tart és nem egyértelmű a befejezés időpontja.
wscript.echo "Kész."