【问题标题】:How to check windows OS update status using Javascript or Node.js?如何使用 Javascript 或 Node.js 检查 Windows 操作系统更新状态?
【发布时间】:2020-05-05 02:12:51
【问题描述】:

我正在寻找一种方法来检查 Windows 操作系统和安全更新是否是最新的。 如果没有,那么我想获取此信息。除此之外,如果有任何可用的更新,那么我也想获取这些信息。

我阅读了几个博客和 StackOverflow 问题,得到了以下答案:

  1. 使用wmic qfe list,但这会提供有关已安装更新的信息,但没有状态(我需要读取状态,例如失败、中止或成功)。
  2. 使用以下 Powershell 脚本(提供有关更新是否可用的信息):
$u = New-Object -ComObject Microsoft.Update.Session
$u.ClientApplicationID = 'MSDN Sample Script'
$s = $u.CreateUpdateSearcher()
$r = $s.Search('IsInstalled=0')
$r.updates|select -ExpandProperty Title

有没有办法检查“Windows 操作系统和安全更新是否是最新的?如果不是,则获取状态(失败、中止等)。如果有任何更新可用,那么我想获取有关可用更新”。

如何使用 Javascript 或 Node.js 实现这一点?

【问题讨论】:

    标签: javascript node.js powershell windows-update


    【解决方案1】:

    据我所知,对于非企业站,没有功能可以查明系统是否已完全更新(仅通过 Windows 更新)。如果您有所需更新的完整列表,那么您可以检查该列表。

    对于更新管理,您必须配置 Windows 10 Enterprise 和 System Center,然后您可以检查工作站是否安装了所需的更新。这样你就可以检查了。

    要获取已安装补丁的列表和状态,您必须按照以下方式进行:

    $Session = New-Object -ComObject "Microsoft.Update.Session"
    $Searcher = $Session.CreateUpdateSearcher()
    $historyCount = $Searcher.GetTotalHistoryCount()
    $Searcher.QueryHistory(0, $historyCount) | Select-Object Title, Date,
         @{name='ResultCode'; expression={switch($_.ResultCode){ 0 {'Not Started'}; 1 {'In Progress'}; 
              2 {'Success'}; 3 {'Success with Errors'}; 4 {'Failed'}; 5 {'Aborted'}
         }}}
    

    您将其保存为 powershell 脚本,例如check_updates.ps1.

    要从 javascript 运行它,您必须生成进程(从保存脚本的目录运行):

    var spawn = require("child_process").spawn;
    spawn("powershell.exe",[".\check_updates.ps1"]);
    

    在这种产卵过程中您必须注意的是安全性。不要忘记分配正确的权限。

    对于 Node.js,请检查以下答案:Execute Powershell script from Node.js

    对于 Node.js,您必须以不同的方式编写它,类似于以下内容(类似于上面发布的链接):

    var spawn = require('child_process').spawn,
        updates = spawn("powershell.exe",["C:\\path\\test\\check_updates.ps1"]);
    
    updates.stdout.on('data', function (data) {
      console.log('stdout: ' + data.toString());
    });
    
    updates.stderr.on('data', function (data) {
      console.log('stderr: ' + data.toString());
    });
    
    updates.on('exit', function (code) {
      console.log('child process exited with code ' + code.toString());
    });
    
    updates.stdin.end();
    

    注意:有时失败的更新可能包含在累积更新中,因此很难找到它是否已安装。

    【讨论】:

    • 感谢您的回答。我试过了,但它没有在控制台中打印任何东西。这是否意味着没有可用的更新?我还尝试了更新可用但控制台中没有打印的系统。我错过了什么吗?
    • @SaurabhChauhan 您是否直接在 powershell 中尝试过(您是如何执行的?)?如果我发布它,我会尝试测试脚本,在你的情况下我也是这样做的。我的电脑上有一个更新列表。我只是仔细检查了我是否没有拼写错误并且它运行良好。您是否安装了任何更新? (更新列表应该比仅仅运行wmic qfe list更长)
    • 有趣的是,当我使用管理员模式执行 PowerShell 脚本时,它打印了一个更新列表作为输出。但是,当我使用 Node.js cmd(使用管理员模式)执行上述 node.js 脚本(在您的答案中提到)时,它不会在控制台中打印任何内容。
    • @SaurabhChauhan 上面的脚本仅是 JavaScript。我不是 Node.js 方面的专家(这就是我提供链接的原因)我的眼睛可能是一些权利限制。也许找不到powershell.exe很难说。
    • @SaurabhChauhan 也许标准输出重定向存在问题。你试过 JavaScript 吗?
    猜你喜欢
    • 2016-12-18
    • 2018-12-17
    • 2021-09-22
    • 2014-02-15
    • 2021-07-19
    • 1970-01-01
    • 2012-11-17
    • 2011-06-09
    • 2020-06-05
    相关资源
    最近更新 更多