Легко для глаз: создание HTML-отчетов с помощью PowerShell
PowerShell — это предпочтительный инструмент каждого ИТ-специалиста для автоматизации задач и получения информации из нескольких систем в стеке Microsoft. При создании отчетов самым простым и наиболее часто используемым форматом вывода является значение, разделенное запятыми (CSV), поскольку его легко считывает Microsoft Excel. Хотя CSV — отличный формат, это не самый простой формат для визуального восприятия, и может быть сложно напрямую сосредоточиться на элементах, требующих внимания. И если вы пытались открыть CSV-файл в системе, в которой не установлен Excel, вы знаете, что текстовый файл со значениями, разделенными запятыми, почти невозможно прочитать. Но есть еще один вариант, который вы можете использовать, чтобы создавать отчеты, которые визуально интереснее и легче для чтения и понимания, и это использование PowerShell для создания отчетов в формате HTML.
Чтобы продемонстрировать, как вы можете создавать отчеты в формате HTML, я попросил своего друга и коллегу Влада Катринеску предоставить нам следующее краткое руководство. Влад — консультант по SharePoint и Office 365, специализирующийся на развертывании SharePoint и SharePoint Online, а также гибридных сценариях. Будучи автором Pluralsight, сертифицированным тренером Microsoft и признанным международным докладчиком, Влад также помог сотням тысяч пользователей и ИТ-специалистов по всему миру лучше понять и максимально эффективно использовать SharePoint. Влад также является самым ценным профессионалом Microsoft (MVP) в SharePoint с 2013 года и ведет личный блог под названием Absolute SharePoint Blog, и он часто делится своими знаниями, выступая на местных конференциях и общественных мероприятиях. Влад также ведет блоги на CMSWire и Computerworld и часто фигурирует на других сайтах Microsoft, таких как Redmond Channel Partner. Вы также можете связаться с Владом в LinkedIn и подписаться на него в Twitter.
Использование командлета ConvertTo-Html
PowerShell включает командлет PowerShell с именем , который преобразует объекты платформы Microsoft.NET в HTML, который может отображаться в веб-браузере. Основное использование этого довольно просто. Вы можете попробовать это прямо сейчас, открыв PowerShell (конечно, как администратор!) и выполнив следующий командлет PowerShell:
Get-EventLog -LogName "Windows PowerShell" | ConvertTo-Html > PSLogReport.html
Вот пример вывода, который может получиться:
Вы также можете, конечно, использовать функции фильтрации в PowerShell, чтобы получить только те значения, которые вам нужны, например:
Get-EventLog -LogName "Windows PowerShell" | ConvertTo-Html ` -Property MachineName,EventID, TimeGenerated ` -Title "Информация журнала Windows PowerShell" ` > FilteredPSLogReport.html
Если вы хотите получить информацию из нескольких источников, а затем объединить их вместе в одном выводе, мы можем использовать параметр переключателя -Fragment, как показано ниже. Это гарантирует, что каждая часть информации станет в основном другим <div> внутри HTML-файла, и в конце все они будут объединены в хорошо отформатированный HTML.
$OS = Get-WmiObject -class Win32_OperatingSystem | ConvertTo-HTML -Fragment $Bios = Get-WmiObject -class Win32_BIOS | ConvertTo-HTML -Fragment $Services = Get-WmiObject -class Win32_Service | ConvertTo-HTML -Fragment ConvertTo-HTML -Body "$OS $Bios $Services" -Title "Отчет" | Out-File StatusReport.html
Добавление стиля к вашему отчету
Вы также можете добавить стили к своим отчетам, либо жестко закодировав их в PowerShell, либо ссылаясь на внешний файл CSS. Для этой статьи я просто создам свой CSS в строке с именем Header, которую вы можете увидеть ниже.
$Header = @" <style> table { семейство шрифтов: "Trebuchet MS", Arial, Helvetica, sans-serif; схлопывание границ: свернуть; ширина: 100%; } th { верхний отступ: 12 пикселей; нижний отступ: 12px; выравнивание текста: по левому краю; цвет фона: #4CAF50; цвет: белый; } </style> "@
Затем запустите следующие командлеты PowerShell, чтобы создать тот же отчет, что и раньше, но с CSS, который мы создали ранее. (Помните, попробуйте их, пока читаете статью, чтобы увидеть результаты!)
$OS = Get-WmiObject -class Win32_OperatingSystem | ConvertTo-HTML -Fragment $Bios = Get-WmiObject -class Win32_BIOS | ConvertTo-HTML -Fragment $Services = Get-WmiObject -class Win32_Service | ConvertTo-HTML -Fragment ConvertTo-HTML -Body "$OS $Bios $Services" -Title "Отчет" -Head $Header | Out-File StatusReport.html
Переход на следующий уровень
Это все, что касается базового командлета PowerShell ConvertTo-HTML, однако существуют модули сообщества, которые позволяют вам перейти на следующий уровень. Одним из таких модулей является модуль PowerShell EnhancedHTML2 от PowerShell MVP Дона Джонса, который размещен в галерее PowerShell. После того, как вы его установите, давайте посмотрим на несколько интересных примеров того, что вы можете с ним сделать!
Прежде всего, выбрав отображение информации либо в виде списка, либо в виде таблицы с параметром :
$Bios = Get-WmiObject -класс Win32_BIOS | Выберите PSComputerName, Производитель, BIOSVersion | ConvertTo-EnhancedHTMLFragment -As List $Bios2 = Get-WmiObject -class Win32_BIOS | Выберите PSComputerName, Производитель, BIOSVersion | ConvertTo-EnhancedHTMLFragment -As Table ConvertTo-EnhancedHTML -HTMLFragments $Bios,$Bios2 -CssUri C:PowerShellCSSstyles2.css | Исходящий файл AsExample.html
Открыв файл, вы увидите, как информация отображается по-другому, и как вы можете использовать этот новый формат для более эффективного отображения информации. Еще один очень интересный вариант — создание динамических таблиц, то есть таблицы, которая автоматически «разбивается на страницы» и имеет окно поиска! В следующем примере мы покажем службы на компьютере сначала в виде динамической таблицы, а затем в виде обычной таблицы.
$Services = Get-Service | Выберите Имя, Отображаемое имя, Статус | ConvertTo-EnhancedHTMLFragment -As Table -PreContent "<h2>Dynamic Services</h2>" -MakeTableDynamic $Services2 = Get-Service | Выберите Имя, Отображаемое имя, Статус | ConvertTo-EnhancedHTMLFragment -As Table -PreContent "<h2> Обычные службы</h2>" ConvertTo-EnhancedHTML -HTMLFragments $Services, $Services2 -CssUri C:PowerShellCSSstyles2.css | Вне файла DynamicExample.html
Конечно, вы можете пойти еще дальше, добавив условное форматирование в зависимости от значения. На этом снимке экрана ниже из сеанса, который я провел на Ignite 2018, вы можете видеть, что пустые ячейки выделены оранжевым цветом, чтобы привлечь внимание:
Другим примером может служить этот отчет, где в зависимости от числового значения он отображается либо черным цветом для нормального режима, либо красным, если требует внимания:
Это требует немного больше знаний и примеров, и, поскольку я хочу, чтобы это было просто, а не писал целую электронную книгу, я просто поделюсь некоторыми дополнительными ресурсами ниже, где вы можете узнать больше о том, как освоить эту тему. Помните, что моя цель здесь не в том, чтобы убедить вас в том, что HTML — это единственное лучшее решение для создания отчетов для PowerShell, а в том, что это еще один вариант, который у вас есть как у ИТ-специалиста для создания отчетов, и когда вы будете создавать свой следующий отчет, возможно, имеет смысл сделать это. это в CSV, или, может быть, имеет смысл отобразить его в HTML, это просто дополнительные инструменты как часть вашего пояса инструментов PowerShell!
Другие ресурсы для отчетов в формате HTML
Курс Pluralsight Влада Катринеску: отчетность с помощью PowerShell HTML и Enhanced HTML
Электронная книга Дона Джонса: Создание HTML-отчетов в PowerShell