Windows - Inaktív szolgáltatások listázása

forráskód letöltése
Hogy lehet legegyszerűbben megállapítani, hogy melyek a telepített, de nem használt szolgáltatások? Kilistázhatjuk a grafikus felületen is, de ha többször van rá szükségünk készítsünk egy egyszerű szkriptet, a Windows Management Instrumentation (WMI) szolgáltatás elérésével kérdezzük le az összes nem futó szolgáltatást és jelenítsük meg az eredményt a képernyőn.
Cikkünkhöz mellékeltük az alábbi szkriptet "InactServices.vbs" néven. Futtatása után megjeleníti a képernyőn az inaktív szolgáltatások listáját.
A telepített, de nem futó szolgáltatások listájának lekérése akkor hasznos, ha a rendszer valamely komponense nem működik megfelelően. Például szervereknél előfordulhat, hogy belső hiba miatt leáll a DNS kliens vagy az SQL szolgáltatás. Bizonyos időközönként futtatva a szkriptet könnyen kiszűrhető a hiba.
Szkriptünk első sorában deklaráljunk egy változót és adjuk meg értéknek, hogy melyik gépen történik a futtatás. Ha pontot (".") adunk meg, az aktuális gépen fog futni a szkript, ha egy másik gépnevet vagy IP címet, akkor azon.
strComputer = "."
Tároljuk el a "Text" változóba a leállított szolgáltatásokat, indítsuk a listát egy fejléccel és egy üres sorral.
Text="Inaktív szolgáltatások:" & chr(10) & chr(13) & chr(10) & chr(13)
Kapcsolódjuk hozzá a "winmgmts" interfészen keresztül a WMI-hoz az aktuálisan bejelentkezett felhasználó hitelesítési adataival (impersonationLevel=impersonate). Ha ez nem biztosít megfelelő jogosultságot a szolgáltatáslista eléréséhez, akkor jelentkezzünk be rendszergazdai azonosítóval.
Set objWMIService = GetObject("winmgmts:" & _
    "{impersonationLevel=Impersonate}!\\" & strComputer & "\root\cimv2")
A "Win32_Service" osztály tulajdonságai és metódusai kezelik a rendszerbe telepített szolgáltatásokat. Készítsünk egy WQL (WMI Query Language) lekérdezést, ahol kérjük le az összes szolgáltatás nevét ("DisplayName") és állapotát ("State"), azon szolgáltatások esetén melyek nem futnak ("State <> 'Running'").
Set colStoppedServices = objWMIService.ExecQuery _
  ("SELECT DisplayName,State FROM Win32_Service WHERE State <> 'Running'")
Dolgozzuk fel az eredményt egy FOR ciklussal.
For Each objService in colStoppedServices
Adjuk hozzá a "Text" változóhoz a lekérdezésben kapott szolgáltatásokat, mindegyiket új sorba írva. Először az adott szolgáltatás nevét, majd egy egyenlőségjel után az állapotát is.
 Text=Text & objService.DisplayName  & " = " & objService.State & chr(10) & chr(13)
Zárjuk a ciklust.
Next
Írjuk ki a kapott eredményt a képernyőre.
   Wscript.Echo Text