Skip to main content

Retrieve list of Windows Update installed updates including non-Windows Updates

Project description

windows_tools

Collection of useful python functions around Microsoft Windows

License Percentage of issues still open Maintainability codecov windows-tests GitHub Release

windows_tools is a set of various recurrent functions amongst

  • antivirus: antivirus state and list of installed AV engines
  • bitlocker: drive encryption status and protector key retrieval
  • bitness: simple bitness identification
  • file_utils: file ownership handling, NTFS & ReFS ACL handling, file listing with permission fixes
  • impersonate: python Runas implementation
  • installed_software: list of installed software from registry, 32 and 64 bits
  • logical_disk: logical disk listing
  • office: microsoft Office version identification, works for click & run, O365 and legacy
  • powershell: powershell wrapper to identify interpreter and run scripts or commands
  • product_key: windows product key retrieval
  • registry: registry 32 and 64 bit API
  • securityprivilege: enable / disable various security privileges for user
  • server: windows server identification
  • users: user lookup for SID/PySID/username
  • virtualization: virtualization platform identification for guest
  • windows_firewall: windows firewall state retrieval
  • wmi_queries: windows WMI query wrapper, wmi timezone converters

It is compatible with Python 3.5+ and is tested on Windows only (obviously).

Setup

You may install the whole windows_tools package or any subpackage using the following commands

pip install windows_tools
pip install windows_tools.<subpackage>

Usage

antivirus

The antivirus package tries to list installed Antivirus products via the SecurityCenter API (using WMI calls). Since SecurityCenter API does not exist on Windows Servers, we also need to check for installed antivirus software using the uninstall registry keys. These checks are more fuzzy, but allow to detect the following products:

  • avast
  • avira
  • avg technologies
  • bitdefender
  • dr web
  • eset
  • f-secure
  • g data software
  • kaspersky
  • mcafee
  • panda security
  • sophos
  • trend micro
  • malwarebytes
  • vipre
  • sentinel one

On top of that list, it will detect any installed software containing "antivirus/antiviral/antimalware" in the name.

Please report back if your antivirus is not detected, so we can improve the fuzzy detection here.

Usage

import windows_tools.antivirus

result = windows_tools.antivirus.get_installed_antivirus_software()

result will contain a list of dict like

[{
        'name': 'Windows Defender',
        'version': None,
        'publisher': None,
        'enabled': False,
        'is_up_to_date': True,
        'type': 'Windows Defender / Security Essentials'
    }, {
        'name': 'Malwarebytes version 4.4.6.132',
        'version': '4.4.6.132',
        'publisher': 'Malwarebytes',
        'enabled': None,
        'is_up_to_date': None,
        'type': None
    }
]

Warning Keys enabled, is_up_to_date and type are only filled via securityCenter API*. Keys version and publisher are only filled via installed software list. The only guaranteed filled key will always be name

bitlocker

Bitlocker can only work on NTFS or ReFS formatted disks. Bitlocker keys can only be retrieved on local disks.

Usage

import windows_tools.bitlocker

result = windows_tools.bitlocker.get_bitlocker_full_status()

result will contain a dict as follows containing raw strings from manage-bde windows tool:

{
	'C:': {
		'status': 'Chiffrement de lecteur BitLocker\xa0: outil de configuration version 10.0.19041\nCopyright (C) 2013 Microsoft Corporation. Tous droits réservés.\n\nVolume C: [Windows ]\n[Volume du système d?exploitation]\n\n    Taille :                     855,14 Go\n    Version de BitLocker :       Aucun\n    État de la conversion :      Intégralement déchiffré\n    Pourcentage chiffré :        0,0%\n    Méthode de chiffrement :     Aucun\n    État de la protection\xa0:      Protection désactivée\n    État du verrouillage :       Déverrouillé\n    Champ d?identification :     Aucun\n    Protecteurs de clés :        Aucun trouvé\n\n', 
		'protectors': None
	},
	'D:': {
		'status': 'Chiffrement de lecteur BitLocker\xa0: outil de configuration version 10.0.19041\nCopyright (C) 2013 Microsoft Corporation. Tous droits réservés.\n\nVolume D: [Étiquette inconnue]\n[Volume de données]\n\n    Taille :                     Inconnu Go\n    Version de BitLocker :       2.0\n    État de la conversion :      Inconnu\n    Pourcentage chiffré :        Inconnu%\n    Méthode de chiffrement :     XTS-AES 128\n    État de la protection\xa0:      Inconnu\n    État du verrouillage :       Verrouillé\n    Champ d?identification :     Inconnu\n    Déverrouillage automatique : Désactivé\n    Protecteurs de clés\xa0:\n        Password\n        Mot de passe numérique\n\n',
		'protectors': 'Chiffrement de lecteur BitLocker\xa0: outil de configuration version 10.0.19041\nCopyright (C) 2013 Microsoft Corporation. Tous droits réservés.\n\nVolume D: [Étiquette inconnue]\nTous les protecteurs de clés\n\n    Password :\n      ID : {SOMEPASS-WORD-ICAN-NNOT-REMEMBERWELL}\n\n    Mot de passe numérique :\n      ID : {SOMEPASS-GUID-ICAN-NNOT-REMEMBERWELL}\n\n'
	}
}

You may parse those or simply pretty print since print will not interpret special characters from a dict or multiple variables at once:

result = windows_tools.bitlocker.get_bitlocker_full_status()


result = get_bitlocker_full_status()
for drive in result:
    for designation, content in result[drive].items():
        print(designation, content)

Warning bitlocker needs to be run as admin. Running as non administrator will produce the following logs

Don't have permission to get bitlocker drive status for C:.
Don't have permission to get bitlocker drive protectors for C:.
Don't have permission to get bitlocker drive status for D:.
Don't have permission to get bitlocker drive protectors for D:.

Output shall be

{
    'C:': {
        'status': None,
        'protectors': None
    },
    'D:': {
        'status': None,
        'protectors': None
    }
}

You can check that you have administrator rights with windows_utils.users module

bitness

file_utils

impersonate

installed_software

logical_disk

office

powershell

product_key

registry

securityprivilege

server

updates

users

virtualization

windows_firewall

wmi_queries

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

windows_tools.updates-2.0.0.tar.gz (12.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

windows_tools.updates-2.0.0-py3-none-any.whl (8.3 kB view details)

Uploaded Python 3

File details

Details for the file windows_tools.updates-2.0.0.tar.gz.

File metadata

  • Download URL: windows_tools.updates-2.0.0.tar.gz
  • Upload date:
  • Size: 12.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.26.0 setuptools/56.0.0 requests-toolbelt/0.9.1 tqdm/4.56.1 CPython/3.8.10

File hashes

Hashes for windows_tools.updates-2.0.0.tar.gz
Algorithm Hash digest
SHA256 7825c353cc5e97435bc368775ce4c4d2d876f11785abc115c6199de515b0060e
MD5 14f093ac90dfd1d8132a54b3bbb46435
BLAKE2b-256 0dae566f39918df4e085a9be6abf57439b1529bdf50e26f622320703d9427604

See more details on using hashes here.

File details

Details for the file windows_tools.updates-2.0.0-py3-none-any.whl.

File metadata

  • Download URL: windows_tools.updates-2.0.0-py3-none-any.whl
  • Upload date:
  • Size: 8.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.26.0 setuptools/56.0.0 requests-toolbelt/0.9.1 tqdm/4.56.1 CPython/3.8.10

File hashes

Hashes for windows_tools.updates-2.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 2752f25e9b70500d3e1840e2661962cb8ff61febb31aea4e012503670c65692d
MD5 f99eb62811e371ebbc49581c00e22e87
BLAKE2b-256 018cdc62c15d3c858c98960a72fe11eb549dc07aa76f21845cd167779b185278

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page