VBScript winmgmts Object
last modified April 9, 2025
The winmgmts
object in VBScript provides access to Windows Management
Instrumentation (WMI). It allows scripts to query and manage system resources.
WMI offers a standardized way to interact with Windows system components.
This object is essential for system administration tasks in VBScript.
winmgmts
can retrieve hardware information, manage services, and
monitor performance. It connects to local or remote computers through WMI.
This tutorial covers winmgmts
with practical examples to demonstrate
its powerful capabilities.
winmgmts Object Overview
The winmgmts
object is a moniker that creates a WMI connection.
It provides access to WMI namespaces, classes, and instances. The object
supports querying system information using WQL (WMI Query Language).
Key features include hardware inventory, process management, and event monitoring. It works with both local and remote systems when proper credentials are provided. Understanding this object enables powerful system administration scripts.
Basic System Information Query
This example demonstrates a simple WMI query to get operating system information. It shows how to connect to WMI and retrieve basic system details. The script outputs the OS name, version, and build number.
Set wmi = GetObject("winmgmts:\\.\root\cimv2") Set os = wmi.ExecQuery("Select * from Win32_OperatingSystem") For Each item in os WScript.Echo "OS Name: " & item.Caption WScript.Echo "Version: " & item.Version WScript.Echo "Build: " & item.BuildNumber Next Set os = Nothing Set wmi = Nothing
The script connects to the default WMI namespace (root\cimv2). It queries the Win32_OperatingSystem class which contains OS information. The results are displayed using a simple loop. This demonstrates basic WMI interaction.
Listing Running Processes
This example shows how to retrieve a list of all running processes. It demonstrates querying the Win32_Process WMI class. The script displays process names and their process IDs.
Set wmi = GetObject("winmgmts:\\.\root\cimv2") Set processes = wmi.ExecQuery("Select * from Win32_Process") WScript.Echo "Running Processes:" WScript.Echo "------------------" For Each proc in processes WScript.Echo proc.Name & " (PID: " & proc.ProcessID & ")" Next Set processes = Nothing Set wmi = Nothing
The script connects to WMI and queries the Win32_Process class. Each process object contains properties like Name and ProcessID. The results are formatted and displayed. This is useful for process monitoring and management.
Checking Disk Space
This example demonstrates how to check disk space using WMI. It queries the Win32_LogicalDisk class for disk information. The script calculates free space percentage for each disk.
Set wmi = GetObject("winmgmts:\\.\root\cimv2") Set disks = wmi.ExecQuery("Select * from Win32_LogicalDisk Where DriveType = 3") WScript.Echo "Disk Space Information:" WScript.Echo "----------------------" For Each disk in disks freeSpace = Round(disk.FreeSpace / 1073741824, 2) totalSpace = Round(disk.Size / 1073741824, 2) percentFree = Round((disk.FreeSpace / disk.Size) * 100, 2) WScript.Echo "Drive " & disk.DeviceID & ":" WScript.Echo " Free: " & freeSpace & " GB" WScript.Echo " Total: " & totalSpace & " GB" WScript.Echo " % Free: " & percentFree & "%" Next Set disks = Nothing Set wmi = Nothing
The script filters for fixed disks (DriveType = 3). It converts bytes to GB for readability. The free space percentage is calculated and displayed. This helps monitor disk usage in automated scripts.
Managing Windows Services
This example shows how to query and control Windows services. It demonstrates listing services and changing their state. The script can start or stop services based on their current status.
Set wmi = GetObject("winmgmts:\\.\root\cimv2") Set services = wmi.ExecQuery("Select * from Win32_Service Where Name = 'Spooler'") For Each svc in services WScript.Echo "Service: " & svc.Name WScript.Echo "Display Name: " & svc.DisplayName WScript.Echo "Status: " & svc.State If svc.State = "Running" Then WScript.Echo "Stopping service..." svc.StopService() Else WScript.Echo "Starting service..." svc.StartService() End If Next Set services = Nothing Set wmi = Nothing
The script queries the print spooler service as an example. It checks the current state and toggles it. Service control methods like StartService and StopService are demonstrated. This is useful for service management scripts.
Monitoring CPU Temperature
This advanced example demonstrates reading CPU temperature through WMI. Note that not all systems support this feature. The script shows how to handle potential errors when querying specialized hardware information.
On Error Resume Next Set wmi = GetObject("winmgmts:\\.\root\wmi") Set temps = wmi.ExecQuery("Select * from MSAcpi_ThermalZoneTemperature") If Err.Number <> 0 Then WScript.Echo "Error accessing temperature data: " & Err.Description WScript.Quit End If WScript.Echo "CPU Temperature Readings:" WScript.Echo "-----------------------" For Each temp in temps celsius = (temp.CurrentTemperature / 10) - 273.15 WScript.Echo "Current Temperature: " & Round(celsius, 1) & "°C" Next If temps.Count = 0 Then WScript.Echo "No temperature sensors found" End If Set temps = Nothing Set wmi = Nothing
The script connects to the WMI root\wmi namespace for hardware data. It converts the temperature from kelvin to celsius. Error handling ensures graceful failure on unsupported systems. This demonstrates advanced WMI usage.
Source
In this article, we have explored the winmgmts
object in VBScript,
covering its usage and practical applications. From system information to
hardware monitoring, these examples demonstrate powerful WMI capabilities.
With this knowledge, you can create advanced system administration scripts.
Author
List all VBScript tutorials.