【问题标题】:How do I get pending windows updates in python?如何在 python 中获取待处理的 Windows 更新?
【发布时间】:2022-01-20 19:55:26
【问题描述】:

我正在尝试在 python 上获取待处理的 windows 更新,但没有模块返回待处理的 windows 更新,只有 windows 更新历史记录,我不需要关于更新的 especifiation 我只需要知道是否有待处理的更新,我正在尝试使用此代码:

from windows_tools.updates import get_windows_updates
import os

for update in get_windows_updates(filter_duplicates=True, include_all_states=False):
    print(update)

返回:

    {'kb': None, 'date': '2022-01-14 20:18:21', 'title': '9PLFNLNT3G5G-AppUp.IntelGraphicsExperience', 'description': '9PLFNLNT3G5G-1152921505694231446', 'supporturl': '', 'operation': 'installation', 'result': 'succeeded'}
{'kb': None, 'date': '2022-01-14 20:18:21', 'title': '9NBLGGH3FRZM-Microsoft.VCLibs.140.00', 'description': '9NBLGGH3FRZM-1152921505694106457', 'supporturl': '', 'operation': 'installation', 'result': 'succeeded'}
{'kb': None, 'date': '2022-01-14 20:18:21', 'title': '9MW2LKJ0TPJF-Microsoft.NET.Native.Framework.2.2', 'description': '9MW2LKJ0TPJF-1152921505692414645', 'supporturl': '', 'operation': 'installation', 'result': 'succeeded'}
{'kb': None, 'date': '2022-01-14 20:18:21', 'title': '9PLL735RFDSM-Microsoft.NET.Native.Runtime.2.2', 'description': '9PLL735RFDSM-1152921505689378154', 'supporturl': '', 'operation': 'installation', 'result': 'succeeded'}
{'kb': None, 'date': '2022-01-14 20:18:15', 'title': 'HP Inc. - HIDClass - 2.1.16.30156', 'description': 'HP Inc. HIDClass  driver update released in  November 2021', 'supporturl': 'http://support.microsoft.com/select/?target=hub', 'operation': 'installation', 'result': 'succeeded'}
{'kb': None, 'date': '2022-01-14 20:18:03', 'title': 'Intel Corporation - Bluetooth - 20.100.7.1', 'description': 'Intel Corporation Bluetooth  driver update released in  July 2020', 'supporturl': 'http://support.microsoft.com/select/?target=hub', 'operation': 'installation', 'result': 'succeeded'}
{'kb': None, 'date': '2022-01-14 20:18:01', 'title': 'Intel Corporation - Extension - 12/16/2018 12:00:00 AM - 20.110.1.1', 'description': 'Intel Corporation Extension  driver update released in  December 2018', 'supporturl': 'http://support.microsoft.com/select/?target=hub', 'operation': 'installation', 'result': 'succeeded'}
{'kb': None, 'date': '2022-01-14 20:17:50', 'title': 'Intel Corporation - Display - 27.20.100.8681', 'description': 'Intel Corporation Display  driver update released in  September 2020', 'supporturl': 'http://support.microsoft.com/select/?target=hub', 'operation': 'installation', 'result': 'succeeded'}
{'kb': None, 'date': '2022-01-14 20:15:12', 'title': 'Realtek Semiconductor Corp. - MEDIA - 6.0.8940.1', 'description': 'Realtek Semiconductor Corp. MEDIA  driver update released in  April 2020', 'supporturl': 'http://support.microsoft.com/select/?target=hub', 'operation': 'installation', 'result': 'succeeded'}
{'kb': 'KB4591272', 'date': '2022-01-14 20:13:19', 'title': '2021-11 Atualização do Windows 10 Version 21H2 para sistemas baseados em x64 (KB4591272)', 'description': 'Instale esta atualização para resolver problemas no Windows. Para obter a lista completa dos problemas incluídos nesta atualização, consulte o artigo da Base de Dados de Conhecimento Microsoft associado. Talvez seja necessário reiniciar o computador após instalar este item.', 'supporturl': 'http://support.microsoft.com', 'operation': 'installation', 'result': 'succeeded'}
{'kb': 'KB5003791', 'date': '2021-10-06 00:00:00', 'title': None, 'description': 'Update', 'supporturl': 'https://support.microsoft.com/help/5003791', 'operation': None, 'result': None}
{'kb': 'KB5009636', 'date': '2022-01-20 00:00:00', 'title': None, 'description': 'Update', 'supporturl': None, 'operation': None, 'result': None}
{'kb': 'KB5005699', 'date': '2021-10-06 00:00:00', 'title': None, 'description': 'Security Update', 'supporturl': None, 'operation': None, 'result': None}

我得到了所有已安装的更新而不是待处理的更新,我如何以编程方式找到待处理的更新。

我正在使用 python 3.10

【问题讨论】:

  • 是否将include_all_states 设置为True 会列出待处理的那些?
  • 不,它没有,我的解决方案是创建一个 vbs 脚本来创建一个包含待更新数量的 txt 文件,然后在 python 中使用该 txt

标签: python python-3.x windows


【解决方案1】:

python 中没有解决方案,所以我做了一个 vbs 脚本并从我的函数内部调用。 vbs 脚本是

Set updateSession = CreateObject("Microsoft.Update.Session")
Set updateSearcher = updateSession.CreateupdateSearcher()        
Set searchResult = updateSearcher.Search("IsInstalled=0 and Type='Software'")


If searchResult.Updates.Count <> 0 Then 

For i = 0 To searchResult.Updates.Count - 1
    Set update = searchResult.Updates.Item(i)
    
Next
End If

Main

Sub Main()
    Dim result, fso, fs
    result = 1 / Cos(25)
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set fs  = fso.CreateTextFile("output.txt", True)
    fs.Write searchResult.Updates.Count
    fs.Close
End Sub

它获取待处理更新的数量,然后我像这样在函数内部调用

import subprocess, time, os


class update_monitor():
    def __init__(self):
        self.output='output.txt'
    
    def updates_restando(self):
        os.system(r'script.vbs')

        time.sleep(10)

        with open(self.output,'r') as file:
            for i in file:
                if i == '0':
                    print('Não há atualizações disponiveis')
                    return 'Não há atualizações disponiveis'
                else:
                    print('Existem atualizações pendentes')
                    return 'Existem atualizações pendentes'


a = update_monitor()
a.updates_restando()

这个解决方案效果很好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-11
    • 1970-01-01
    • 2021-09-18
    相关资源
    最近更新 更多