WMI with IronPython
From IronPython Cookbook
Examples from Vasta Sutra, of using the managed interface to WMI on the local system.
These examples use objects from the System.Management assembly:
import clr
clr.AddReference("System.Management")
from System.Management import (
ManagementObject,
ManagementObjectSearcher
)
mo = ManagementObject("Win32_Processor.DeviceID='CPU0'")
for p in mo.Properties:
print p.Name, '=', p.Value
query = ManagementObjectSearcher("Select * from Win32_Processor")
mo = query.Get().GetEnumerator().next()
mo = ManagementObject("Win32_PerfFormattedData_PerfOS_Processor.Name='_total'")
for p in mo.Properties:
print p.Name, '=', p.Value
This next example reports CPU usage:
import clr
clr.AddReference("System.Management")
from System.Management import ManagementObject
from System.Threading import Thread
while True:
mo = ManagementObject("Win32_PerfFormattedData_PerfOS_Processor.Name='_total'")
print mo["PercentProcessorTime"]
Thread.Sleep(5000)
This third example is adapted from this blog entry:
import clr
clr.AddReference("System.Management")
from System.Management import ManagementObjectSearcher
def requestWMI(squery,sproperties):
output = ""
objMgt = ManagementObjectSearcher(squery)
for result in objMgt.Get():
output += result.GetPropertyValue(sproperties)
return output
print requestWMI("Select * from Win32_BIOS", "Caption")
This example is from an email on the mailing list from 2004:
import clr
clr.AddReference('System.Management')
from System.Management import (
ManagementClass, ManagementScope,
ManagementPath, ManagementObjectSearcher,
WqlObjectQuery
)
def showAll(root):
scope = ManagementScope(root)
path = ManagementPath("__namespace")
nsClass = ManagementClass(scope, path, None)
for namespace in nsClass.GetInstances():
print "-----"
for nsProp in namespace.Properties:
print nsProp.Name, ":", nsProp.Value
print "--"
scope = ManagementScope("root\\" + str(namespace.GetPropertyValue("Name")))
searcher = ManagementObjectSearcher(scope, WqlObjectQuery("select * from meta_class"), None)
for wmiClass in searcher.Get():
print "Class:", wmiClass.GetPropertyValue("__CLASS")
showAll('root')
This fourth example is converted from C# from the ManagementEventWatcher page:
import clr
clr.AddReference('System.Management')
from System.Management import *
from System import TimeSpan
query = WqlEventQuery("__InstanceCreationEvent", TimeSpan(0, 0, 1), "TargetInstance isa \"Win32_Process\"")
watcher = ManagementEventWatcher()
watcher.Query = query
watcher.Options.Timeout = TimeSpan(0, 0, 5)
e = watcher.WaitForNextEvent()
# Start a new Win32 process (like notepad) before the timeout
instance = e['TargetInstance']
for entry in instance.Properties:
print entry.Name, entry.Value
Back to Contents.

