Назад | Перейти на главную страницу

Проверка MS Meltdown / Spectre PowerShell - какой-либо способ сфокусировать или отфильтровать вывод?

У меня есть около 100 серверов, на которых я должен убедиться, что они защищены от Spectre и Meltdown. Хорошая новость заключается в том, что Microsoft создала удобный командлет PowerShell, который будет проверять статус защиты любого компьютера с Windows. Плохая новость в том, что они не включили для него никаких специальных параметров, у него есть только общие параметры.

Настоящая плохая новость заключается в том, что вывод очень подробный и не совсем фильтруемый. Вот пример вывода get-speculationcontrolsettings всего с одного сервера:

Speculation control settings for CVE-2017-5715 [branch target injection]

Hardware support for branch target injection mitigation is present: False
Windows OS support for branch target injection mitigation is present: True
Windows OS support for branch target injection mitigation is enabled: False
Windows OS support for branch target injection mitigation is disabled by system policy: True
Windows OS support for branch target injection mitigation is disabled by absence of hardware support: True

Speculation control settings for CVE-2017-5754 [rogue data cache load]

Hardware requires kernel VA shadowing: True
Windows OS support for kernel VA shadow is present: True
Windows OS support for kernel VA shadow is enabled: False

Suggested actions

 * Install BIOS/firmware update provided by your device OEM that enables hardware support for the branch target injection mitigation.
 * Follow the guidance for enabling Windows Server support for speculation control mitigations described in https://support.microsoft.com/help/4072698

Мне бы очень хотелось иметь красивую таблицу, которую я могу экспортировать в CSV, которая просто показывает имена серверов в одном столбце и значения True / False в других столбцах.

какой делает небольшая помощь в том, что я могу передать вывод в select и он создаст одну строку таблицы в конце всего этого выходного мусора выше, но когда я запускаю get-speculationcontrolsettings против целого массива серверов, он выдает копию всего этого мусора, а затем строку таблицы для одного сервера, затем выводит мусор очередной раз и строка таблицы для следующего сервера и т. д.

Я мог бы отправить все в текстовый файл, затем выполнить поиск и заменить, чтобы избавиться от всего мусора, а затем преобразовать текст в таблицу, а затем скопировать вставку в Excel.

Но что было бы действительно круто, если бы в PowerShell был какой-то способ ... ну, я не знаю. Только данные таблицы вывода? Может быть, как-то заполнить массив, а затем повторить массив?

Есть яркие идеи?


Изменить - Примечание для других

Последняя версия команды, которую я использую (после комментирования всех write-host операторы в самом модуле, как это предлагается в принятом ответе) выглядит так:

Invoke-Command -ComputerName $servernamess ${function:Get-SpeculationControlSettings} -ErrorAction SilentlyContinue | select PSComputerName, BTIHardwarePresent, BTIWindowsSupportPresent, BTIDisabledBySystemPolicy, BTIDisabledByNoHardwareSupport, KVAShadowWindowsSupportPresent, KVAShadowWindowsSupportEnabled | ft

Если вы заполните $servernames переменная со списком имен компьютеров, но вы хотите это сделать, то эта команда выполняет удаленно команду get-speculationcontrolsettings на всех серверах с таким именем. Вы не увидите подробного вывода, если вы редактировали файл psm1. Кроме того, если у вас есть имена компьютеров в переменной для компьютеров, которые недоступны, вы получите на них ошибки, поэтому -ErrorAction SilentlyContinue параметр есть там. Наконец, команда выбирает имя сервера и важные сведения о мерах по снижению рисков и форматирует их в таблице.

Немного быстрого поиска и замены, чтобы превратить пробелы в запятые, и у вас есть CSV, который вы можете открыть в Excel и применить некоторое условное форматирование для управления, чтобы увидеть, где вы находитесь в Spectre и Meltdown в среде Windows, не дожидаясь выполнения соответствия еще одно сканирование Nessus.

Я решил попробовать сделать это на собственном горьком опыте и наткнулся на ответ.

Выполнив эти команды:

$servers = Get-ADComputer -Filter *
$servernames = $servers.name
Start-Transcript -Path "C:\SpecControlStatus.txt"
Invoke-Command -ComputerName $servernames ${function:Get-SpeculationControlSettings} | select PSComputerName, KVAShadowWindowsSupportPresent
Stop-Transcript

В расшифровке нет всего "мусорного" вывода от каждого вызова Get-SpeculationControlSettings, у него есть только таблица, созданная select заявление.

Я предполагаю, что вывод "мусора" как-то только консольный.

Обратите внимание, что в домене Windows, над которым я работаю, есть только серверы приложений, поэтому получение имен всех компьютеров в домене также является именами всех серверов, которые мне нужно уменьшить.

Если вы немного знаете PowerShell, вы также можете сделать копию файла:

C:\Program Files\WindowsPowerShell\Modules\SpeculationControl\1.0.x\SpeculationControl.psm1

измените вывод на то, что вам нравится, а затем запустите новый скрипт.