Windows - Késleltetés állítása a boot menüben - szkriptből

WMI 12. rész

forráskód letöltése
Ha több operációs rendszer található egy számítógépen a Windows NT/2000/XP automatikusan készít egy menüt, amellyel bekapcsolás után kiválaszthatjuk, hogy melyiket akarjuk elindítani. Felsorolásra kerülnek a lehetőségek és alapértelmezésben 30 másodperc áll rendelkezésünkre, hogy tegyünk valamit, ha nem nyúlunk a billentyűzethez, akkor elindul az alapértelmezettnek beállított rendszer. Ez a bizonyos 30 másodperc több helyen is egyszerűen megváltoztatható, de ha egy hálózat több gépén kell megtenni, akkor legegyszerűbb, ha írunk a feladat elvégzéséhez egy szkriptet.
Cikkünkhöz mellékeltünk két szkriptet. A "ShowBootDelay.vbs" megjeleníti az indításkori várakozási időt. A "SetBootDelay.vbs" pedig beállítja 3 másodpercre.
A beállítások a "c:\boot.ini" rejtett fájlban tárolódnak, ami egy szöveges állomány. Legegyszerűbbnek az tűnik, ha megkeressük benne a szükséges paramétert és átírjuk. A Windows Management Instrumentation (WMI) szolgáltatás használatával hozzájutunk egy sokkal egyszerűbb megoldáshoz. Mielőtt ismertetnénk, nézzük meg, hogy a Windows milyen egyéb lehetőségeket nyújt:
  • Nyissuk meg a következő ablakot: Vezérlőpult > (Teljesítmény és karbantartás) > Rendszer (Control Panel > (Performance and Maintenance) > System). A megjelenő ablakban tallózzunk el a következő helyre: Speciális > Indítás és helyreállítás > Beállítások (Advanced > Startup and Recovery > Settings). Ha aktív a "Rendszerek listájának megjelenítése" ("Time to display list of operating systems") jelölőnégyzet, akkor működik az indításkori késleltetés és ekkor lehet a mellette lévő mezőben változtatni az értékét.
  • Másik megoldás a "c:\boot.ini" fájl közvetlen szerkesztés. Ez kicsit nehézkes feladat, mert először meg kell jeleníteni a rejtett fájlokat (Windows 2000-ben: Vezérlőpult > Mappabeállítások > Nézet > Rejtett fájlok és mappák megjelenítése (Control Panel > Folder Options > View > Hidden files and folders - Show hidden files and folders)). Ezután el kell távolítani az írásvédettséget (jobboldali egérgomb a "boot.ini" fájlon > Tulajdonságok (Properties)) és csak utána lehet módosítani a beállításokat. Végül célszerű ismét visszakapcsolni az írásvédettséget. A Windows XP-ben kicsit egyszerűbb a helyzet, mert a fenti lépéseket elvégzi helyettünk. Írjuk be a Start > Futtatás (Start > Run) mezőbe: MSCONFIG. Elindul egy segédprogram, ahol lépjünk a "BOOT.INI" oldalra és a "Időkorlát 30 mp" mezőben végezzük el a módosításokat.
Térjünk vissza a WMI-beli megvalósításra. Ebben semmi szükség a "c:\boot.ini" szerkesztésére, nem kell írásvédettséget sem állítani. Elég, ha ismerjük a "Win32_ComputerSystem" osztály "SystemStartupDelay" tulajdonságát. Maga az osztály a számítógép és az operációs rendszer változóit / tulajdonságait tartalmazza (pl.: gép típusa, gyártója, leírása, munkacsoport, stb.). Írjunk egy szkriptet a tulajdonság szerkesztésére:
Feladat: állítsuk át a várakozási időt 3 másodpercre. Definiáljunk egy "Delay" nevű változót és adjunk neki decimális 3 értéket.
Delay = 3
Következik a WMI elérése. A futtató felhasználó nevével és jelszavával érjük el az operációs rendszert (impersonationLevel = impersonate), a kapcsolatot a "winmgmts" szolgáltatáson keresztül hozzuk létre és lekérjük a "Win32_ComputerSystem" osztály összes (*) tulajdonságát.
Set CompSysSet = GetObject ( "winmgmts: {impersonationLevel = impersonate}").ExecQuery ("select * from Win32_ComputerSystem")
A lekérdezés eredményét feldolgozva egy FOR ciklussal nézzük végig az összes visszakapott objektumot, állítsuk be a "SystemStartupDelay" tulajdonságot a "Delay" változóra, végül a PUT metódussal írjuk vissza a változtatást a WMI-ba.
for each CompSys in CompSysSet
   CompSys.SystemStartupDelay = Delay
   CompSys.Put_()
next
Utolsó lépésként jelenítsünk meg a képernyőn egy ablakot, hogy látható legyen, amikor a szkript befejezi a futást.
WScript.Echo "Várakozási idő beállítva " & Delay & " másodpercre."
A szkript futtatásának sikerességét a fent említett két módszer valamelyikével ellenőrizhetjük.
Az aktuálisan beállított várakozási idő lekérdezése néhány lépéssel rövidebb feladat. A "Win32_ComputerSystem" osztály elérése változatlan. Az objektum példányokat ellenőrző FOR ciklusra is szükség lesz, de most nem írjuk, hanem olvassuk a "SystemStartupDelay" tulajdonságot és megjelenítjük a tartalmát a képernyőn.

Set CompSysSet = GetObject ( "winmgmts: {impersonationLevel = impersonate}").ExecQuery ("select * from Win32_ComputerSystem")
for each CompSys in CompSysSet
  WScript.Echo "A várakozási idő jelenleg " & CompSys.SystemStartupDelay & " másodpercre van beállítva."
next

WMI cikksorozat