Microsoft CVRF API
Мне стало известно, что с 9 февраля 2021 года Microsoft Security Response Center удалил требования к регистрации для своего API CVRF .
Это может быть хорошим способом программной идентификации, загрузки и применения обновлений безопасности и, например, подготовки полностью исправленных систем.
В этом случае я пытался определить последнее накопительное обновление для данной версии Windows, скажем, 20H2, которое позже будет загружено из каталога Центра обновления Майкрософт , в котором отсутствует соответствующий API.
В настоящее время я могу просто подумать о разборе вызова:
curl -X GET --header 'Accept: application/json' 'https://api.msrc.microsoft.com/cvrf/v2.0/cvrf/2021-Feb'
Есть ли более конкретный и надежный способ?
2 ответа
Я не нашел простого способа разобрать вывод JSON. Однако такого рода работы:
$product = "Windows 10"
$version = "20H2"
$raw = Invoke-WebRequest 'https://api.msrc.microsoft.com/cvrf/v2.0/cvrf/2021-feb' -Headers @{"accept"="application/json"}
$json = $raw.Content | ConvertFrom-Json
$search = "$product*$version*x64-based*"
$prd = $json.ProductTree.Branch[0].Items.Items | where{$_.Value -like $search}
$prdID = $prd.ProductID
($prd | Out-String) | Write-Host
$json.Vulnerability.Remediations | where{$_.ProductID -eq $prdID} |
%{echo $_.URL} | Sort-Object | Get-Unique | Select -Last 1
Приведенный выше код не будет работать для меня на более новых платформах, но если вы проверите, больше ли массив ProductID 0, и выберете 0-й элемент, вы сможете правильно сравнить строки. Насколько мне известно, объект where не позволяет вам сделать это. Поэтому я поставил $rem на место и сделал внутри него вложенные циклы prdID и $rem. Я бы вставил код, но правила размещения кода я не могу понять. Просто PM мне, если какие-либо вопросы.