Skip to content

Instantly share code, notes, and snippets.

@Bouni
Created June 22, 2022 06:12
Show Gist options
  • Save Bouni/5f47c1d490070d1e33e7e3b6dedd4723 to your computer and use it in GitHub Desktop.
Save Bouni/5f47c1d490070d1e33e7e3b6dedd4723 to your computer and use it in GitHub Desktop.
Generate a list of all installed programs on MS Win 10, exclude MS programs, write to file
import datetime
import winreg
# Script from here: https://gist.github.com/psatler/010b26cd57e758278823d7027c40e2a6
# Slightly modified
dt = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
def foo(hive, flag):
aReg = winreg.ConnectRegistry(None, hive)
aKey = winreg.OpenKey(
aReg,
r"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall",
0,
winreg.KEY_READ | flag,
)
count_subkey = winreg.QueryInfoKey(aKey)[0]
software_list = []
for i in range(count_subkey):
software = {}
try:
asubkey_name = winreg.EnumKey(aKey, i)
asubkey = winreg.OpenKey(aKey, asubkey_name)
software["name"] = winreg.QueryValueEx(asubkey, "DisplayName")[0]
try:
software["version"] = winreg.QueryValueEx(asubkey, "DisplayVersion")[0]
except EnvironmentError:
software["version"] = "undefined"
try:
software["publisher"] = winreg.QueryValueEx(asubkey, "Publisher")[0]
except EnvironmentError:
software["publisher"] = "undefined"
software_list.append(software)
except EnvironmentError:
continue
return software_list
software_list = (
foo(winreg.HKEY_LOCAL_MACHINE, winreg.KEY_WOW64_32KEY)
+ foo(winreg.HKEY_LOCAL_MACHINE, winreg.KEY_WOW64_64KEY)
+ foo(winreg.HKEY_CURRENT_USER, 0)
)
software_list = [sw for sw in software_list if "Microsoft" not in sw["publisher"]]
max_lens = [0, 0]
for sw in software_list:
if len(sw["name"]) > max_lens[0]:
max_lens[0] = len(sw["name"])
if len(sw["version"]) > max_lens[1]:
max_lens[1] = len(sw["version"])
software_list = sorted(software_list, key=lambda d: (d["name"], d["publisher"]))
with open("C:/temp/programlist.txt", "w") as f:
f.write(f"Number of installed apps: {len(software_list)} | {dt}\n")
print(f"Number of installed apps: {len(software_list)} | {dt}")
f.write(f"{'=' * 200}\n")
print("=" * 200)
for software in software_list:
f.write(
f"{software['name']:<{max_lens[0]}} | {software['version']:<{max_lens[1]}} | {software['publisher']}\n"
)
print(
f"{software['name']:<{max_lens[0]}} | {software['version']:<{max_lens[1]}} | {software['publisher']}"
)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment