Skip to main content

PyMI - Windows Management Infrastructure API for Python

This project provides a Python native module wrapper over the Windows Management Infrastructure (MI) API [1].

Works with Python 2.7 and 3.x on any Windows version which supports the MI API, both x86 and x64.

It includes also a drop-in replacement for the Python WMI [2] module, proving much faster execution times and no dependency on pywin32.

Installation

Pip is the preferred way to install PyMI. Pre-compiled binary wheels are available on Pypi [3]:

pip install PyMI

Usage

This project can be used either with a lower level interface that reflects the underlying MI API structure or with the higher level (and slightly slower) WMI module replacement.

MI module basic usage

Here’s a simple example which enumerates all processes and kills any instance of “KillerRabbitOfCaerbannog.exe”.

import mi

with mi.Application() as a:
    with a.create_session(protocol=mi.PROTOCOL_WMIDCOM) as s:
        proc_name = u'notepad.exe'
        with s.exec_query(
                u"root\\cimv2", u"select * from Win32_Process") as q:
            i = q.get_next_instance()
            while i is not None:
                if i[u'name'].lower() == u"KillerRabbitOfCaerbannog.exe":
                    cls = i.get_class()
                    # Prepare parameters
                    params = a.create_method_params(cls, u"Terminate")
                    # Exit code
                    params['reason'] = 10
                    # Invoke method
                    with s.invoke_method(i, u"Terminate", params) as op:
                        op.get_next_instance()
                i = q.get_next_instance()

WMI module basic usage

And here’s the same example written using the WMI module replacement, which provides a simpler and higher level interface over the mi API:

import wmi

conn = wmi.WMI()
for p in conn.Win32_Process():
    if p.Name == u"KillerRabbitOfCaerbannog.exe":
        p.Terminate(reason=10)

Build

Use the following to build Python 3 wheels. Those will be copied to the build dir.

python setup.py bdist_wheel

The best way to build PyMI for Python 2.7 or 3.4 and below is to use the Visual Studio solution (described below). This will statically link the vc140 runtime, which is required by PyMI.

Custom VS env vars

distutils will automatically locate your Visual Studio and Windows SDK installation. If you’d like to call vcvarsall.bat yourself and use a specific version, use the following:

function SetVCVars($vcvarsdir, $platform="amd64")
{
    pushd $vcvarsdir
    try
    {
        cmd /c "vcvarsall.bat $platform & set" |
        foreach {
          if ($_ -match "=") {
            $v = $_.split("="); set-item -force -path "ENV:\$($v[0])"  -value "$($v[1])"
          }
        }
    }
    finally
    {
        popd
    }
}

# Replace this folder with the one in which the vcvarsall.bat script is
# located (the exact location depends on the Visual Studio version).
# SetVCVars "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build"
SetVCVars "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC"

$env:DISTUTILS_USE_SDK=1
$env:MSSdk=1

python setup.py bdist_wheel

Make sure to use the Visual Studio toolset that matches the Python version that you’re targetting: https://wiki.python.org/moin/WindowsCompilers.

By default, we’re statically linking the VC runtime. To enable dynamic linking, set $env:PYMI_VCRUNTIME_DYNAMIC_LINKING="y".

Debug builds

The easiest way to do a debug build is to set the following in setup.cfg:

[build]
debug = 1

This will be honored regardless of the build type (e.g. stdist, wheel, etc).

To enable distutils debug logging, you may set the following:

$env:DISTUTILS_DEBUG = 1

Before doing a debug build, you may wish to clean the build dir.

Using the Visual Studio Solution

Open the provided PyMI.sln solution in Visual Studio 2015 [4], choose your target Python version / platform and build. Wheel packages are automatically generated in the dist folder for release builds.

Note: the target Python version must be present. The Python path can be customized by setting the corresponding PythonDir* user macro, e.g. PythonDir_34_x64. The wheel and GitPython packages are required during the build process:

pip install wheel
pip install GitPython

As an alternative, you can use the MSBuild CLI tool:

$env:MSBuildEmitSolution="TRUE"
MSBuild.exe .\PyMI.sln /p:Configuration="Release (Python 3.7)"

References

Metadata

Release files for PyMI 1.0.9

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for PyMI 1.0.9
File Size Uploaded
pymi-1.0.9.tar.gz 65.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for PyMI 1.0.9
File Interpreter ABI Platform
pymi-1.0.9-cp311-cp311-win_amd64.whl CPython 3.11 CPython 3.11 Windows x86-64 Details

Total release size: 375.0 kB

Release files / pymi-1.0.9.tar.gz

Download URL pymi-1.0.9.tar.gz
Size 65.6 kB
Tags Source
SHA-256 checksum
How to use checksums
b1221115eb6bafa5e1494f1184418abe735793b817395c87ba25caa412c0706d
BLAKE2b-256 checksum
How to use checksums
10c34cf0c923d3188659567af09ce3f2f7220e010154ebbc691cd0ceef8ce7b4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.11.6

Release files / pymi-1.0.9-cp311-cp311-win_amd64.whl

Download URL pymi-1.0.9-cp311-cp311-win_amd64.whl
Size 309.4 kB
Tags CPython 3.11 Windows x86-64
SHA-256 checksum
How to use checksums
0afdaa99d17984db135502842edb58c90510fa62be9b72965fd4a49467c1dcf2
BLAKE2b-256 checksum
How to use checksums
5cba8f61104a13a48d5b74887b18711ca1f457371ef5d09b649c4f877a6e36f4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.11.6
Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page