Рубрики
Uncategorized

Создание веб-отчета в PowerShell, используйте -Force Luke

Статья, описывающая, как создавать веб-отчеты с использованием PowerShell. Теги с PowerShell, учебником, WebDev, Devops.

PowerShell-Tutorials (3 части серии)

TLDR; Идея этой статьи заключается в том, чтобы показать, как создать веб-отчет. Я покажу использовать несколько команд, которые вы можете подключить, это делает всю тяжелую подъем для вас

Сценарий — создайте отчет от некоторых удаленных данных

Хорошо, вот вы здесь, вы хотите прочитать данные из одного места и представить, что в качестве веб-отчета. Данные удалены, вам нужно как-то получить, вам также, вероятно, нужно подумать о том, как преобразовать входящие данные и, наконец, создайте этот веб-отчет. Если вы являетесь разработчиком, вы, вероятно, думаете, что о порядке, это, вероятно, несколько движущихся частей, 10-20 строк кода. Но вы слышали о PowerShell, он должен быть мощным, сделать много тяжелого подъема, так почему бы не дать ему вращение.

Шаги, которые мы возьмем

Для достижения нашей задачи нам нужно спланировать ее. Выполните его последовательно, а кто знает, может быть, это то, что мы можем повторно использовать? Так какие шаги:

  1. Получить данные Отказ Нужно как-то схватить данные
  2. Конвертировать Отказ Позволяет предположить, что эти данные поставляются в некоторых типах формата, и нам, скорее всего, нужно преобразовать его какую-то другую форму.
  3. Нынешние Отказ Поэтому мы привлекли данные, массировали его в подходящий формат, теперь что? Теперь мы хотим представить его в качестве веб-отчета, HTML, CSS и т. Д.

Добраться до работы

У нас есть план игры. Теперь давайте посмотрим, сможем ли мы найти команды, которые нам нужны. Хорошая отправная точка — это Microsoft. PowerShell. Утилита Раздел Отказ В этом разделе есть тонны команд, которые много тяжелые подъема для вас.

Захватывая данные

Первые вещи сначала нам нужно удаленно схватить некоторые данные, так что наши варианты?

  • Invoke-webRequest Похоже, это позволит нам позвонить URL, отправить тело, учетные данные и т. Д., Кажется многообещающим.
  • Invoke-Restmethod Отказ Как насчет этого, как это отличается? Это предложение прямо здесь:

PowerShell форматы ответа на основе типа данных. Для корма RSS или Atom PowerShell возвращает элемент или входные узлы XML. Для JavaScript Object Notiator (JSON) или XML PowerShell преобразуется или десериализирует, содержимое в объектах [pscustomobject].

Требуется ответ JSON и превращает это в pscustomobject, приятно. Ну давайте посмотрим с нашими другими командами, прежде чем принять решение.

Представляя данные

Это последнее, что нам нужно сделать, но нам нужно понимать, есть ли команда, которая помогает нам с созданием отчета и главное, какой ввод требуется. Я думаю, что мы нашли это:

Да, это напоминает нам о чем-то, Invoke-Restmethod Отказ Почему? Причина Invoke-Restmethod производит пользовательские объекты, то есть объекты .Net.

Как мы сохраняем отчет к файлу, хотя мы можем хранить это где-то и пусть он будет размещен на веб-сервере? О, вот пример, труба ее к OUT-файл , как так Конвертировать- HTML | Алиас из файла .htm

Обзор решения

Таким образом, у нас есть теория о том, как это сделать:

  1. Позвоните Invoke-Restmethod Отказ
  2. Сопровождается Конвертировать- HTML Отказ
  3. Сопровождается OUT-файл Отказ

Построить решение

Кажется почти слишком легким. Ну ну, давайте дадим это вихре. Первые вещи первыми, давайте выбираем источник данных, Swapi, API звездных войн, причина использовать -ФОРИКА , я прав?:)

  1. Начать PWSH в консоли.
  2. Создать файл Web-Report.ps1.
  3. Добавьте следующий код:
   Invoke-RestMethod -URI https://swapi.dev/api/people/1/ |
     ConvertTo-Html |
       Out-File report.htm
  1. Беги ./web-report.ps1 ( или . \ Web-Report.ps1 Для Windows Folks)

Это создало Report.htm Файл для нас. Хорошо, давайте посмотрим:

   

    
    
    HTML TABLE
    
    
nameheightmasshair_colorskin_coloreye_colorbirth_yeargenderhomeworldfilmsspeciesvehiclesstarshipscreatededitedurl
Luke Skywalker17277blondfairblue19BBYmalehttps://swapi.dev/api/planets/1/System.Object[]System.Object[]System.Object[]System.Object[]09/12/2014 13:50:5120/12/2014 21:17:56https://swapi.dev/api/people/1/
  1. Покажите этот файл в браузере с Invoke_item :
   Invoke-Item ./report.htm

Это должно начать браузер, и вы должны увидеть что-то вроде:

Хорошо, вы можете сделать здесь, или мы можем сделать его более гибким. Нам не нравятся жесткодируемые ценности, верно? ПРАВИЛЬНО?

Сделать это гибким

Теперь я так подумал, давайте добавим некоторые параметры для, URL и имени отчета.

  1. Добавьте следующий код в верхнюю часть нашего сценария Web-Report.ps1 :
   Param(
      [String] $URL = "https://swapi.dev/api/people/1/",
      [String] $Report = "report.htm"
    )
  1. Давайте вызовем его снова, на этот раз с новым URL » https://sswapi.dev/api/people/2/»:
   ./web-report.ps1 -URL https://swapi.dev/api/people/2/
  1. Давайте проверим ответ в Report.htm Отказ:
   

    
    
    HTML TABLE
    
    
nameheightmasshair_colorskin_coloreye_colorbirth_yeargenderhomeworldfilmsspeciesvehiclesstarshipscreatededitedurl
C-3PO16775n/agoldyellow112BBYn/ahttps://swapi.dev/api/planets/1/System.Object[]System.Object[]System.Object[]System.Object[]10/12/2014 15:10:5120/12/2014 21:17:50https://swapi.dev/api/people/2/

На этот раз у нас есть C-3PO , Да, определенно не Луки, похоже, работает:)

Улучшить ответ

Итак, до сих пор у нас была тонна столбцов, возвращающихся, может быть, нам просто нужно несколько полей из ответа, как Имя , планета и Высота Отказ Да, давайте сделаем это и просто выберите то, что нам нужно от ответа:

  1. Давайте добавим Выбор-объект вот так:
   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
  1. Давайте снова вызовем:
   ./web-report.ps1 -URL https://swapi.dev/api/people/1/

И наш отчет сейчас выглядит:

   

    
    
    HTML TABLE
    
    
nameheighthomeworld
Luke Skywalker172https://swapi.dev/api/planets/1/

Намного лучше:) На самом деле, немного читаю, мы можем просто использовать —Property на Конвертировать- HTML Итак, мы получаем:

   Invoke-RestMethod -URI $URL |
      ConvertTo-Html -Property name, height, homeworld |
        Out-File $Report

Сделать это красивым

Во всей честности этот отчет плохой, без цветов, нет ничего. Конечно, мы должны иметь возможность пройти файл CSS для Конвертировать- HTML ?

Ах да, глядя через документы есть параметр -Ссури который принимает путь к файлу. Давайте создадим файл CSS, затем.

  1. Создать 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}
  1. Обновите сценарий, чтобы взять -Ссури Report.csss на Конвертировать- HTML
  2. Запустите его снова, вы должны увидеть это в браузере:

Резюме

Таким образом, мы узнали, что мы могли бы использовать всего несколько команд, 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»