Sdscompany.ru

Компьютерный журнал
2 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Powershell convertto html

HTML-отчеты в PowerShell

Помимо других замечательных функций, у Windows PowerShell есть встроенная возможность выводить результат работы командлета в формате HTML. Достаточно передать результат работы по конвейеру в ConvertTo-HTML, а затем — в Out-File, чтобы сохранить результат в файле. Например, так:

Это даст нам список служб, которые должны быть запущены, но не работают. Лучше всего эту информацию размещать на интрасетевом файловом сервере, чтобы сотрудники службы поддержки проверяли этот файл каждое утро. Кстати, при вводе этой команды с клавиатуры не забудьте, что первые четыре строки завершаются символом конвейера (|). Последняя строка завершается возвратом каретки.

Если вы будете вводить команду в интерактивном режиме в оболочке, то заметите, что после ввода символа конвейера в первой строке и нажатия Enter приглашение сменится на «>>». Это нормально. Это означает, что Windows PowerShell ожидает ввода следующей строки. После ввода последней, четвертой строки дважды нажмите Enter, чтобы сообщить оболочке, что ввод завершен и команду можно выполнять.

Но с командлетом ConvertTo-HTML есть одна проблема: он умеет работать только с одним типом выходных данных за раз. Если попытаться передать в командлет несколько объектов разных типов — службы, процессы и записи в журнале событий, он не отформатирует результат надлежащим образом.

Если нужно создать что-то типа консолидированного отчета, придется прибегнуть к уловке и использовать разные параметры командлета. Допустим, вы хотите создать отчет, содержащий список служб, которые остановлены, хотя должны работать. Также надо создать страницу с сотней последних записей в журнале событий безопасности, перечнем всех процессов на сервере и некоторой базовой информацией о самом сервере.

Надо знать две вещи: во-первых, иметь представление о параметре –Fragment командлета ConvertTo-HTML (о нем можно узнать из справочного файла командлета) и, во-вторых, знать, что командлет не пишет HTML в файл.

Как и в первом примере, командлет помещает HTML-код в конвейер, а для передачи в файл нужен дополнительный шаг. В первом примере это выглядит громоздко, но позволяет нам написать следующее:

При вводе этой команды с клавиатуры завершайте символом конвейера все строки за исключением последней, которую надо завершить нажатием Enter. Здесь выполняются четыре разные команды, каждая из которых получает определенную порцию данных и преобразует их в HTML-фрагмент.

HTML-фрагмент представляет собой длинную строку HTML-кода, в котором нет заголовочных тегов, без которых страница не считается полной. На последнем этапе я просто внедряю полученный HTML-код в тело полноценной страницы, которую затем вывожу в файл.

Попытайтесь выполнить то же самое и посмотрите, что произойдет. Это очень просто. Иногда шутят, что Windows PowerShell — единственный продукт Microsoft, генерирующий «чистый» HTML-код без добавления каких-либо стилей или форматирования. Недостаток заключается в том, что такой код довольно скучен. Так и было задумано. Ожидается, что вы его сами приукрасите с использованием отдельного CSS-файла.

В HTML форматирование применяется к тегам

Здесь надо ввести две строки, и снова первая завершается символом конвейера. Попытайтесь выполнить всю обновленную команду. Результат будет выглядеть намного приятнее. К сожалению, CSS не позволяет применить стиль к разным строкам таблицы, по крайней мере, это нельзя сделать в HTML-коде, создаваемом PowerShell.

Можно воспользоваться параметрами –PreContent и –PostContent командлета ConvertTo-HTML, чтобы добавить заголовки разделов и любой другой необходимый текст. Это позволит сделать отчет намного более читабельным. Все переданные в параметре –PreContent строки будут размещены перед таблицей, а в параметре –PostContent — после таблицы. С примерами можно познакомиться, выполнив в оболочке команду Help ConvertTo-HTML –example.

Это замечательный пример того, как средствами Windows PowerShell можно создавать полезные отчеты, которые затем можно передавать коллегам или партнерам. Не требуется много работы, чтобы создать прилично выглядящие HTML-документы. Сохраняя полученные страницы на интрасетевом файловом сервере, можно предоставлять доступ к ним сотрудникам, менеджерам и всем, кому они могут понадобиться.

How can I stop ConvertTo-HTML from creating an empty table?

I am trying to create a report using PowerShell ConvertTo-HTML

However this code resulting an empty table in my HTML.

Any idea why this issue happens? I have tried multiple ways to remove this(sample «2nd try») but it will create the empty table in other place.

Or is there a way to remove this empty table after ConvertTo-HTML being called? Any help is appreciated.

Создан 12 мар. 17 2017-03-12 10:05:06 Rudy

You are currently using the ‘ConvertTo-HTML’ two times. What if you take out the ‘ConvertTo-HTML’ in the IF statements and only do it in your final result? – Zach Olinske 12 мар. 17 2017-03-12 13:59:50

I am creating 2 HTML fragments, to be combined into 1 HTML document. In the result. if frag1 and frag2 exists, in the doc 3 tables ( 1 empty 2 populated ) appear. – Rudy 13 мар. 17 2017-03-13 02:16:50

The empty table can be the result of converting a ‘$null’ object into html or of selecting properties in the ‘ConvertTo-Html’ cmdlet that do not exist in the input object. Do you have an object in ‘$FileLine’ that does not have the properties ‘Name’ and ‘Action’? – Manuel Batsching 13 мар. 17 2017-03-13 08:52:28

Читать еще:  Скачать игру ошибка

No, even if $FileLine is empty, the extra table still appears. – Rudy 13 мар. 17 2017-03-13 10:05:59

What version of PowerShell are you running this from? – Matt 13 мар. 17 2017-03-13 10:38:56

2.1. For workaround I have put «table:last-child < display: none; visibility: hidden; >» However the empty table still shown in Outlook, so need a permanent solution here. Also reported by people, but since I need the 2 fragments, the solution described here https://social.technet.microsoft.com/Forums/windowsserver/en-US/3b4d8fc6-e491-42fe-9a97-a103987203cf/strange-extra-empty-table-when-building-a-report-with-converttohtml?forum=winserverpowershell does not work – Rudy 13 мар. 17 2017-03-13 10:45:46

1 ответ

I know what your main issue is but the solution might be something you need to figure out for yourself. Reading the description of ConvertTo-HTML on TechNet

The ConvertTo-Html cmdlet converts .NET Framework objects into HTML that can be displayed in a Web browser. You can use this cmdlet to display the output of a command in a Web page.

In your final call (in both trys) you are not specifying an -InputObject which is what would typically be used as the content for your empty table. Seeing as it is optional this is not an error but the cmdlet created the placeholder table anyway. You don’t see this with you $frag s because you provided objects via the pipeline.

I tried adding in some dummy/empty data for testing but it obviously did not accomplish anything since I was always adding something.

If you are willing to use some regex you can scrub out the empty table.

Beyond that, short of building your own HTML content, I do not know how to avoid this.

Создан 13 мар. 17 2017-03-13 23:19:34 Matt

ConvertTo-Html: HTML-Reports erstellen in PowerShell

Mit seinen zahl­reichen Cmdlets erlaubt Power­Shell den Abruf von fast belie­bigen System­infor­mationen. Wenn ein Kom­mando größere Daten­mengen zurück­gibt, dann ist die Aus­gabe auf dem Bild­schirm aber meist sehr unüber­sichtlich. In diesem Fall kann man die Resul­tate für die Ansicht im Browser auf­bereiten.

PowerShell unterstützt eine ganze Reihe von Optionen, um Daten in verschiedenen Formaten darzustellen. Dazu zählt etwa das Konvertieren zu bzw. aus CSV, die Auf­bereitung mittels Format-List, Formate-Table und Out-GridView oder das Schreiben von XML-Dateien. Mit ConvertTo-Html kommt eine weitere Möglich­keit hinzu.

Standardmäßig nur rohe Anzeige der Daten

Leitet man den Output eines Kommandos auf dieses Cmdlet über eine Pipe weiter, dann produziert es eine HTML-Seite, die neben einem mit dem Inhalt «HTML TABLE» nur die eigentliche Payload enthält.

Da eine solche Web-Seite keine Formatierung und keine ergänzenden Informationen enthält, sieht sie entsprechend spartanisch und roh aus. Will man daraus einen HTML-Report erzeugen, der diesen Namen verdient, bedarf es einiger Maßnahmen.

Eigenschaften für den Report bearbeiten

Die wichtigste Vorbereitung besteht darin, die Ausgabe eines Kommandos oder eines Scripts so zu filtern, dass sie sich auf einer Seite des Browsers darstellen lässt, ohne dass man horizontal scrollen muss. Diese Aufgabe kann ConvertTo-Html selbst über­nehmen, solange man keine weiter­gehenden Ansprüche stellt.

Folgendes Beispiel ermittelt mit Get-EventLog die letzten 20 Einträge im Systemlog, die nach einem bestimmten Datum geschrieben wurden und leitet sie an ConvertTo-Html weiter. Dieses übernimmt mit dem Parameter Property die gewünschten Eigenschaften in den Bericht:

Get-EventLog -LogName System -after 24.08.2017 -Newest 20 |
ConvertTo-Html -Property EventID, MachineName, Index, Category, EntryType,
Message, Source, InstanceId, TimeGenerated > eventrep.html

Dieses Kommando schreibt die HTML-Ausgabe im in die Datei eventrep.html. Sieht man diese im Browser an, so fällt auf, dass die Spalten­überschriften identisch sind mit den Namen der Eigen­schaften. Diese sind nicht immer aufschlussreich und man könnte überlegen, sie ins Deutsche zu übersetzen.

Hinzu kommt etwa auch noch, dass MachineName den FQDN des Rechners enthält. Wenn sie ohnehin alle der gleichen Domäne angehören, dann kann man hier die Spaltenbreite reduzieren, um den knapp bemessenen Platz besser auszunutzen.

Attribute anpassen mit Calculated Properties

Für diese Aufgabe greift man auf Select-Object zurück, weil dieses Cmdlet den Einsatz von Calculated Properties unterstützt. Mit ihrer Hilfe kann man den Namen von Eigenschaften und ihren Wert ändern:

Dieses Beispiel enthält gleich zwei solcher berechneten Eigenschaften. Der Ausdruck

teilt den MachineName entlang von ‘.’ als Trennzeichen auf und nimmt das erste Element des Arrays, das aus dieser Operation hervorgeht. Es handelt sich dabei um den Namen des Hosts. Dieses neue Attribut erhält die Bezeichnung «Host».

Die zweite Calculated Property

beschränkt sich darauf, den Namen in der Spalten­überschrift von EntryType auf Typ zu ändern.

Report um Metadaten ergänzen

Im nächsten Schritt wird man wahrscheinlich beschreibende Informationen hinzufügen wollen. Dazu gehört etwa ein aufschlussreicher oder eine ebensolche Überschrift. Für beide sieht ConvertTo-Html entsprechende Parameter vor:

Wie man leicht erkennen kann, legt der Parameter Title den im Kopf des Dokuments fest. Mit PreContent kann man sämtliche Inhalte definieren, die vor der eigentlichen Ausgabe des Cmdlets erscheinen sollen.

Читать еще:  Принтер пишет ошибка печати что делать

In unserem Fall ist dies eine Überschrift, die den Namen des Users und das aktuelle Datum plus Uhrzeit enthält. Hier könnte man etwa auch ein Firmenlogo einfügen. PostContent erfüllt den gleichen Zweck unterhalb der Tabelle.

Style-Informationen hinzufügen

Schließlich kann man sich daran machen, den Report ein bisschen hübscher zu gestalten. Erzeugt man solche Berichte öfters, dann erstellt man ein externes Stylesheet und verbindet dieses über den Parameter CssUri mit der HTML-Datei, indem man ihm die URL der CSS-Datei übergibt. Sinnvoll ist dies allerdings nur, wenn man das CSS auf einem allgemein zugänglichen Web-Server ablegen kann.

In den meisten Fällen wird es jedoch einfacher sein, die Formatierung in den des Reports zu übernehmen. Allzu umfangreich werden die Stildefinitionen meist ohnehin nicht ausfallen, nachdem ConvertTo-Html keinerlei class- oder id-Attribute in der Tabelle verwendet.

Falls man mit den Parametern Body, PreContent oder PostContent nicht viel eigenen Inhalt einfügt, dann wird man im Wesentlichen nur die Stile für die Elemente einer Tabelle wie table, tr, th oder td definieren.

Formatierung der Tabelle

Für diese Aufgabe kann man den Parameter Head verwenden, der den Kopf des Dokuments gestaltet. Wenn man sich dafür entscheidet, muss man den gesamten Inhalt des -Elements selbst bereitstellen, also auch den . Der Parameter Title greift in diesem Fall nicht mehr.

In diesem Beispiel definieren wir den gesamten Kopfbereich des Dokuments in der Variablen $head und übergeben diese dann an den gleichnamigen Parameter.

Um eine halbwegs günstige Aufteilung der Seitenbreite zu erreichen, kann man für td ein einheitliches Maß festlegen, das für die schmäleren Spalten passt (hier 100px). Zusätzlich verhindert man mit max-width, dass breite Spalten wie etwa jene mit dem Message-Text die halbe Seite belegen. Das klappt aber nicht, wenn man die ursprünglichen Zeilen­umbrüche der Messages mit white-space:pre beibehalten möchte.

Wenn sich die Daten partout nicht in den verfügbaren Spalten der Tabelle unterbringen lassen, kann man mit dem Parameter -As List zur Listenform umschalten. Dabei handelt es sich zwar auch um eine Tabelle, aber die Namen der Attribute stehen nicht oben, sondern links.

ConvertTo-Html

Преобразует объекты Microsoft .NET Framework в код HTML, который может отображаться в веб-браузере.

Синтаксис

Описание

Командлет ConvertTo-Html преобразует объекты .NET Framework в код HTML, который может отображаться в веб-браузере. Этот командлет можно использовать для вывода результатов выполнения команды на веб-страницу.

Параметры командлета ConvertTo-Html позволяют выбирать свойства объектов, задавать формат таблиц или списков, определять заголовок HTML-страницы, добавлять текст перед объектом и после него, а также возвращать только фрагмент с таблицей или списком, а не полную страницу.

При передаче командлету ConvertTo-Html нескольких объектов Windows PowerShell создает таблицу (или список) на основании свойств первого переданного объекта. Если у оставшихся объектов нет одного из указанных свойств, то значению этого свойства для такого объекта будет соответствовать пустая ячейка. Если же у оставшихся объектов имеются дополнительные свойства, значения этих свойств будут проигнорированы.

Параметры

Определяет форматирование объекта — таблица или список. Допустимые значения: TABLE и LIST. По умолчанию используется значение TABLE.

В случае указания значения TABLE создается таблица HTML, напоминающая формат таблицы Windows PowerShell. В строке заголовка отображаются имена свойств. Каждая строка таблицы соответствует одному объекту и содержит значения всех свойств этого объекта.

В случае указания значения LIST для каждого объекта создается таблица HTML из двух столбцов, напоминающая формат списка Windows PowerShell. В первом столбце отображается имя свойства, а во втором — его значение.

Значение по умолчанию

Принимать входные данные из конвейера?

Принимать подстановочные знаки?

Задает текст для добавления после открывающего тега . По умолчанию в этом месте нет текста.

Значение по умолчанию

Принимать входные данные из конвейера?

Принимать подстановочные знаки?

-CssUri

Задает универсальный идентификатор ресурса (URI) каскадной таблицы стилей (CSS), применяемой к HTML-файлу. URI включается в ссылку на таблицу стилей в выходных данных.

Значение по умолчанию

Принимать входные данные из конвейера?

Принимать подстановочные знаки?

-Fragment

Создает только таблицу HTML. Теги HTML, HEAD, TITLE и BODY будут опущены.

Значение по умолчанию

Принимать входные данные из конвейера?

Принимать подстановочные знаки?

Задает содержимое тега . По умолчанию используется код » HTML TABLE «. Если параметр Head задан, то параметр Title игнорируется.

Значение по умолчанию

Принимать входные данные из конвейера?

Принимать подстановочные знаки?

-InputObject

Задает объекты, которые должны быть представлены в коде HTML. Введите переменную, содержащую объекты, либо получающую их команду или выражение.

При задании с помощью этого параметра нескольких объектов, например при перечислении всех работающих на компьютере служб, командлет ConvertTo-Html создает таблицу, в которой отображаются свойства коллекции или массива объектов (System.Object[]). Чтобы создать таблицу из отдельных объектов, следует передавать их командлету ConvertTo-Html с помощью оператора конвейера.

Читать еще:  Ошибка при восстановлении подключения z

Значение по умолчанию

Принимать входные данные из конвейера?

Принимать подстановочные знаки?

-PostContent

Задает текст для добавления после закрывающего тега

Значение по умолчанию

Принимать входные данные из конвейера?

Принимать подстановочные знаки?

-PreContent

Задает текст для добавления перед открывающим тегом

Значение по умолчанию

Принимать входные данные из конвейера?

Принимать подстановочные знаки?

-Property

Включает в код HTML заданные свойства объектов.

Значение по умолчанию

Принимать входные данные из конвейера?

Принимать подстановочные знаки?

-Title

Задает заголовок HTML-файла, т. е. текст, помещаемый между тегами .

Значение по умолчанию

Принимать входные данные из конвейера?

Принимать подстановочные знаки?

Данный командлет поддерживает общие параметры -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer и -OutVariable. Дополнительные сведения см. в разделе about_Commonparameters.

Ввод и вывод

Входным типом является тип объектов, которые можно передавать командлету по конвейеру. Возвращаемым типом является тип объектов, возвращаемых командлетом.

Любой объект .NET можно передать командлету ConvertTo-Html по конвейеру.

Командлет ConvertTo-Html возвращает набор строк, которые вместе составляют корректный HTML-документ.

Примечания

Чтобы использовать этот командлет, передайте ему один или несколько объектов с помощью конвейера или задайте объект с помощью параметра InputObject. Если командлет получает несколько объектов, то результат применения этих двух подходов различается.

— Если несколько объектов передаются командлету по конвейеру, то Windows PowerShell отправляет объекты командлету по одному. В результате командлет ConvertTo-Html создает таблицу, в которой отображаются отдельные объекты. Например, если по конвейеру передать командлету ConvertTo-Html запущенные на компьютере процессы, то в полученной таблице будут содержатся все процессы.

Используем Visual Studio Code вместо Powershell ISE для создания PowerShell скриптов

Большинство администраторов для написания своих PowerShell скриптов используют встроенную среду PowerShell ISE (Integrated Scripting Environment). Но на данный момент Microsoft практически перестала развивать PowerShell ISE и рекомендует использовать более мощный, удобный, гибкий и бесплатный инструмент Visual Studio Code (VS Code). В этой статье мы рассмотрим, как установить, настроить и использовать Visual Studio Code вместо Powershell ISE для запуска ваших PowerShell команд, а также разработки и тестирования сложных PowerShell скриптов.

VS Code является кроссплатформенной средой разработки, для которой имеется огромное количество расширения, с помощью который можно создавать код практически на любом языке программирования. В VS Code есть встроенная поддержка Git, высокие возможности по работе с кодом и его отладки.

Вы можете бесплатно скачать VSCode по ссылке: https://code.visualstudio.com/ Скачайте установочный файл VSCodeSetup-x64 (около 53 Мб) и запустите его.

Установка VSCode проблем не вызывает. При установке рекомендуется добавить пути к Visual Studio Code в переменные окружения PATH.

.

После запуска Visual Studio Code вам нужно установить специальное бесплатное расширение для поддержки языка PowerShell — ms-vscode.PowerShell (https://marketplace.visualstudio.com/items?itemName=ms-vscode.PowerShell).

Данное расширение добавляет расширенные возможности по работе с кодом PowerShell: подсветка синтаксиса, снипеты, автонадобор команд (IntelliSense), встроенная справка и браузер командлетов, интерактивная отладка скриптов и т.д.

Вы можете установить расширение через меню расширений (Extension) в левом сайдбаре. Выполните поиск по ключу powershell и выполните установку расширения PowerShell: Develop PowerShell scripts in Visual Studio Code .

Если вы работаете в изолированной сети, вы можете установить расширение из vsix файла. Скачайте файл ms-vscode.PowerShell-2019.5.0.vsix по ссылке выше и установите его через меню Install from VSIX.

Для удобства работы я установил следующие настройки интерфейса VSCode (значок шестеренки в левом нижнем углу).

workbench.colorTheme = PowerShell ISE – цветовая схема максимально напоминает привычную PowerShell ISE
editor.formatOnType = On
editor.formatOnPaste = On
powershell.integratedConsole.focusConsoleOnExecute = Off
window.zoomLevel = 0
editor.mouseWheelZoom = On

Вы можете задать настройки VSCode через json файл, для этого нажмите кнопку Open Settings (JSON) и можете скопировать эти настройки в виде текста:

<
«workbench.colorTheme»: «PowerShell ISE»,
«editor.formatOnType»: true,
«editor.formatOnPaste»: true,
«powershell.integratedConsole.focusConsoleOnExecute»: false,
«editor.mouseWheelZoom»: true,
«files.defaultLanguage»: «powershell»,
«editor.fontSize»: 12,
«terminal.integrated.fontSize»: 12,
«files.encoding»: «utf8»
>

Попробуем использовать возможности VSCode для запуска PowerShell команды и отладки скриптов.

Создадим новый файл проекта (это обычный текстовый файл). Можно одновременно работать с несколькими файлами, они также организованы в виде вкладок, между которыми можно переклчаться.

Наберем простую команду для вывода списка процессов Get-Process . Как вы видите, благодаря технологии IntelliSense поддерживается автоматический донабор команды по клавише Tab и встроенная справка о доступных параметрах командлета.

Чтобы выполнить одну команду PowerShell, встаньте на нужную строку и нажмите F8. Если нужно выполнить несколько строк кода PowerShell, выделите их в редакторе с помощью мыши и нажмите F8. Результаты выполнения команды содержатся в окне Terminal. Для выполнения всего файла PS1 выберите Terminal -> Run Active File.

Также в окне Terminal вы можете выполнять команды PowerShell / cmd в интерактивном режиме.

Если в вашем PowerShell коде используются функции, щелкнув по имени функции и выбрав пункт Go to Definition, вы автоматически перейдете к коду функции.

С помощью встроенного отладчика сценариев (Ctrl+Shift+D) при запуске PowerShell скрипта вы можете видеть значения переменных, контрольные значения и устанавливать точки прерывания.

Надеюсь, эта статья станет вашей отправной точкой по изучению и использованию богатых возможностей Visual Studio Code при написании PowerShell скриптов.

Ссылка на основную публикацию
Adblock
detector