PowerShell-Tutorials (3 части серии)
TLDR; Идея этой статьи заключается в том, чтобы показать, как создать веб-отчет. Я покажу использовать несколько команд, которые вы можете подключить, это делает всю тяжелую подъем для вас
Сценарий — создайте отчет от некоторых удаленных данных
Хорошо, вот вы здесь, вы хотите прочитать данные из одного места и представить, что в качестве веб-отчета. Данные удалены, вам нужно как-то получить, вам также, вероятно, нужно подумать о том, как преобразовать входящие данные и, наконец, создайте этот веб-отчет. Если вы являетесь разработчиком, вы, вероятно, думаете, что о порядке, это, вероятно, несколько движущихся частей, 10-20 строк кода. Но вы слышали о PowerShell, он должен быть мощным, сделать много тяжелого подъема, так почему бы не дать ему вращение.
Шаги, которые мы возьмем
Для достижения нашей задачи нам нужно спланировать ее. Выполните его последовательно, а кто знает, может быть, это то, что мы можем повторно использовать? Так какие шаги:
- Получить данные Отказ Нужно как-то схватить данные
- Конвертировать Отказ Позволяет предположить, что эти данные поставляются в некоторых типах формата, и нам, скорее всего, нужно преобразовать его какую-то другую форму.
- Нынешние Отказ Поэтому мы привлекли данные, массировали его в подходящий формат, теперь что? Теперь мы хотим представить его в качестве веб-отчета, HTML, CSS и т. Д.
Добраться до работы
У нас есть план игры. Теперь давайте посмотрим, сможем ли мы найти команды, которые нам нужны. Хорошая отправная точка — это Microsoft. PowerShell. Утилита Раздел Отказ В этом разделе есть тонны команд, которые много тяжелые подъема для вас.
Захватывая данные
Первые вещи сначала нам нужно удаленно схватить некоторые данные, так что наши варианты?
- Invoke-webRequest Похоже, это позволит нам позвонить URL, отправить тело, учетные данные и т. Д., Кажется многообещающим.
- Invoke-Restmethod Отказ Как насчет этого, как это отличается? Это предложение прямо здесь:
PowerShell форматы ответа на основе типа данных. Для корма RSS или Atom PowerShell возвращает элемент или входные узлы XML. Для JavaScript Object Notiator (JSON) или XML PowerShell преобразуется или десериализирует, содержимое в объектах [pscustomobject].
Требуется ответ JSON и превращает это в pscustomobject, приятно. Ну давайте посмотрим с нашими другими командами, прежде чем принять решение.
Представляя данные
Это последнее, что нам нужно сделать, но нам нужно понимать, есть ли команда, которая помогает нам с созданием отчета и главное, какой ввод требуется. Я думаю, что мы нашли это:
- Конвертировать- HTML Преобразует объекты .NET в HTML, которые могут отображаться в веб-браузере.
Да, это напоминает нам о чем-то, Invoke-Restmethod Отказ Почему? Причина Invoke-Restmethod производит пользовательские объекты, то есть объекты .Net.
Как мы сохраняем отчет к файлу, хотя мы можем хранить это где-то и пусть он будет размещен на веб-сервере? О, вот пример, труба ее к OUT-файл , как так Конвертировать- HTML | Алиас из файла .htm
Обзор решения
Таким образом, у нас есть теория о том, как это сделать:
- Позвоните
Invoke-RestmethodОтказ - Сопровождается
Конвертировать- HTMLОтказ - Сопровождается
OUT-файлОтказ
Построить решение
Кажется почти слишком легким. Ну ну, давайте дадим это вихре. Первые вещи первыми, давайте выбираем источник данных, Swapi, API звездных войн, причина использовать -ФОРИКА , я прав?:)
- Начать
PWSHв консоли. - Создать файл Web-Report.ps1.
- Добавьте следующий код:
Invoke-RestMethod -URI https://swapi.dev/api/people/1/ |
ConvertTo-Html |
Out-File report.htm
- Беги
./web-report.ps1( или. \ Web-Report.ps1Для Windows Folks)
Это создало Report.htm Файл для нас. Хорошо, давайте посмотрим:
HTML TABLE
| name | height | mass | hair_color | skin_color | eye_color | birth_year | gender | homeworld | films | species | vehicles | starships | created | edited | url |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Luke Skywalker | 172 | 77 | blond | fair | blue | 19BBY | male | https://swapi.dev/api/planets/1/ | System.Object[] | System.Object[] | System.Object[] | System.Object[] | 09/12/2014 13:50:51 | 20/12/2014 21:17:56 | https://swapi.dev/api/people/1/ |
- Покажите этот файл в браузере с
Invoke_item:
Invoke-Item ./report.htm
Это должно начать браузер, и вы должны увидеть что-то вроде:
Хорошо, вы можете сделать здесь, или мы можем сделать его более гибким. Нам не нравятся жесткодируемые ценности, верно? ПРАВИЛЬНО?
Сделать это гибким
Теперь я так подумал, давайте добавим некоторые параметры для, URL и имени отчета.
- Добавьте следующий код в верхнюю часть нашего сценария Web-Report.ps1 :
Param(
[String] $URL = "https://swapi.dev/api/people/1/",
[String] $Report = "report.htm"
)
- Давайте вызовем его снова, на этот раз с новым URL » https://sswapi.dev/api/people/2/»:
./web-report.ps1 -URL https://swapi.dev/api/people/2/
- Давайте проверим ответ в Report.htm Отказ:
HTML TABLE
| name | height | mass | hair_color | skin_color | eye_color | birth_year | gender | homeworld | films | species | vehicles | starships | created | edited | url |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| C-3PO | 167 | 75 | n/a | gold | yellow | 112BBY | n/a | https://swapi.dev/api/planets/1/ | System.Object[] | System.Object[] | System.Object[] | System.Object[] | 10/12/2014 15:10:51 | 20/12/2014 21:17:50 | https://swapi.dev/api/people/2/ |
На этот раз у нас есть C-3PO , Да, определенно не Луки, похоже, работает:)
Улучшить ответ
Итак, до сих пор у нас была тонна столбцов, возвращающихся, может быть, нам просто нужно несколько полей из ответа, как Имя , планета и Высота Отказ Да, давайте сделаем это и просто выберите то, что нам нужно от ответа:
- Давайте добавим
Выбор-объектвот так:
Select-Object name, age, planet |
С полным кодом выглядит так:
Param(
[String] $URL = "https://swapi.dev/api/people/1/",
[String] $Report = "report.htm"
)
Invoke-RestMethod -URI $URL |
ConvertTo-Html -Property name, height, homeworld |
Out-File $Report
- Давайте снова вызовем:
./web-report.ps1 -URL https://swapi.dev/api/people/1/
И наш отчет сейчас выглядит:
HTML TABLE
| name | height | homeworld |
|---|---|---|
| Luke Skywalker | 172 | https://swapi.dev/api/planets/1/ |
Намного лучше:) На самом деле, немного читаю, мы можем просто использовать —Property на Конвертировать- HTML Итак, мы получаем:
Invoke-RestMethod -URI $URL |
ConvertTo-Html -Property name, height, homeworld |
Out-File $Report
Сделать это красивым
Во всей честности этот отчет плохой, без цветов, нет ничего. Конечно, мы должны иметь возможность пройти файл CSS для Конвертировать- HTML ?
Ах да, глядя через документы есть параметр -Ссури который принимает путь к файлу. Давайте создадим файл CSS, затем.
- Создать
Report.csssи добавьте следующие CSS:
table {
border: solid 1px black;
padding: 10px;
border-collapse: collapse;
}
tr:nth-child(even) {background: #CCC}
tr:nth-child(odd) {background: #FFF}
- Обновите сценарий, чтобы взять
-Ссури Report.csssнаКонвертировать- HTML - Запустите его снова, вы должны увидеть это в браузере:
Резюме
Таким образом, мы узнали, что мы могли бы использовать всего несколько команд, Invoke-Restmethod , Конвертировать- HTML и OUT-файл И бум, мы создали себе отчет.
Полный код:
Param(
[String] $URL = "https://swapi.dev/api/people/1/",
[String] $Report = "report.htm"
)
Invoke-RestMethod -URI $URL |
ConvertTo-Html -CssUri report.css -Title "Web report" -Property name, height, homeworld |
Out-File $Report
PowerShell-Tutorials (3 части серии)
Оригинал: «https://dev.to/azure/building-a-web-report-in-powershell-use-the-force-luke-58aj»