Как проверить windows состояние обновления ОС, используя Javascript или Node.js? - PullRequest
0 голосов
/ 22 апреля 2020

Я ищу способ проверить, актуальны ли 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 обновления операционной системы и безопасности или нет? Если нет, то получить статус (ошибка, прервано и т. д.) c.). Если доступно какое-либо обновление, я хотел бы получить информацию о доступном обновлении ".

Как этого добиться, используя Javascript или Node.js?

1 Ответ

1 голос
/ 04 мая 2020

Насколько мне известно, нет функции, чтобы узнать, полностью ли обновлена ​​система (только через windows update) для станций не-предприятия. Если у вас будет полный список необходимых обновлений, вы можете проверить его по списку.

Для управления обновлениями необходимо настроить 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 проверьте этот ответ: Выполните скрипт Powershell из 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();

Примечание: Иногда неудачное обновление может быть включено в накопительные обновления, поэтому может быть сложно найти если он был установлен.

...