如何使用 Javascript 或 Node.js 检查 windows OS 更新状态?

How to check windows OS update status using Javascript or Node.js?

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

我阅读了一些博客和 Whosebug 问题并得到了以下答案:

  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

有什么方法可以检查"Whether windows OS and security updates are up to date or not? If not then get status (failure, aborted etc.). If any update is available then I would like to fetch information about the available update"。

如何使用 Javascript 或 Node.js 实现此目的?

据我所知,对于非企业站点,没有发现系统是否完全更新(只能通过 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 你必须以不同的方式写它,沿着这些线(类似于上面发布的 link):

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();

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