
Cikkünkhöz mellékelve megtalálható az alábbiakban szereplő szkript. Futtatva leállítja és elindítja a DNS-ügyfél szolgáltatást.
Az alábbiakban szereplő műveletek elvégzéséhez rendszergazdai jogosultság szükséges.
A hibajelenség abból áll, hogy a gép nem lát "kifelé", tehát nem képes a kéréseket feloldani IP címekké. Ellenkező irányban minden rendben van, a kliensek képesek csatlakozni az adott géphez. A probléma a "DNS-ügyfél" ("DNS-Client") szolgáltatás lefagyása. Amikor újraindítjuk a gépet, akkor ez is újraindul és működik tovább. A gép újraindítása nélkül a következő módon lehet elhárítani a hibát:
Indítsuk el a Felügyeleti eszközök > Szolgáltatások ("Administrative Tools > Services") konzolt és keressük meg a "DNS-ügyfél" ("DNS-Client") szolgáltatást. Kattintsunk rá a jobb oldali egérgombbal és válasszuk az "Újraindítás" ("Restart") menüt. Rövid várakozás után megtörténik a szolgáltatás leállítása és ismételt elindítása.
Ennél a módszernél van egyszerűbb megoldás is: Készítsünk egy szkriptet, amely elvégzi a fenti lépéseket helyettünk. A Windows Management Instrumentation (WMI) "Win32_Service" osztálya kezeli a szolgáltatásokat. Nem csak tulajdonságokat, de metódusokat is elérhetővé téve.
Szolgáltatás leállítása
Első dolog, amit meg kell tennünk, hogy csatlakozunk az osztályhoz és lekérdezzük az összes példányát. Hitelesítési szintnek az "impersonate" értéket adva, egy rendszergazda számára már elérhetővé válnak az objektumok.
Set ServiceSet = GetObject( "winmgmts: {impersonationLevel = impersonate}" ).ExecQuery ("select * from Win32_Service")
Ezután egy ciklussal ellenőrizzük le egyesével a visszakapott gyermekobjektumokat és keressük ki a DNS-ügyfelet. Hogy tudjuk meg, hogy melyik az? Meg kell nézni a "Name" vagy "Description" tulajdonságokat. Hogy melyiket az a legtöbb WMI objektumnál mindegy, mert tartalmuk megegyezik. A szolgáltatás leállítására használjuk a "StopService" metódust és ellenőrizzük le, hogy hiba nélkül lefutott-e. Ha nem, akkor írjunk ki a képernyőre egy hibaüzenetet és a hibakódját.
for each Service in ServiceSet
if Service.Description = "DNS-ügyfél" then
error=Service.StopService
if error <> 0 then WScript.echo "A szolgáltatás leállítása közben hiba keletkezett. Kódja:" & error
end If
next
Ezzel az adott szolgáltatás leállt. Most az elindítást végző kód következik.
Szolgáltatás elindítása
A hitelesítés és a "Win32_Service" objektum elérése most is ugyanúgy zajlik, mint az előbb. Az objektum példányokon is ugyanúgy végre kell hajtani az ellenőrzést, de ezúttal a "StartService" metódus meghívására lesz szükség.
Set ServiceSet = GetObject( "winmgmts: {impersonationLevel = impersonate}").ExecQuery ("select * from Win32_Service")
for each Service in ServiceSet
if Service.Description = "DNS-ügyfél" then
error=Service.StartService
if error <> 0 then WScript.echo "A szolgáltatás elindítása közben hiba keletkezett. Kódja:" & error
end If
next
Más szolgáltatások leállításához, elindításához vagy újraindításához a fenti kódban át kell írni a "DNS-ügyfél" nevet az adott szolgáltatás nevére.