У меня есть около 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
измените вывод на то, что вам нравится, а затем запустите новый скрипт.