PowerShell: получение указанных c слов из ответа API и компиляция в HTML таблицу - PullRequest
0 голосов
/ 16 марта 2020

Я пытаюсь получить определенные c слова из API, к сожалению, ответ API - это просто ответ тела, который содержит следующий текст - пример ниже:

Они обнаружили, что это из-за проблемы со Сторонней студией, Square Melon, с которой связались и работают над решением. Обновления будут опубликованы после устранения проблемы в ожидании обратной связи от команд. Командир инцидента: Барр ie Джеймс Средство устранения INC1063757 PD 387049

Какой наилучший способ получить «Барр ie Джеймс» & и номер IN C (INC1063757). К сожалению, я застрял на этом некоторое время, потому что может быть несколько разных случаев, что означает, что имя и номер IN C изменятся.

Есть идеи?

1 Ответ

0 голосов
/ 16 марта 2020

Предполагая, что вы присваиваете ответ этого API переменной $response, нам сначала нужно разбить его из одной строки в массив строк, что мы и сделаем следующим образом.

 $response = Invoke-RestMethod -uri www.mycoolsite.com #or maybe Invoke-WebRequest
 $response
 >They have found that this is due to in issue with the 3rd party Studio, Square Melon, who have been contacted and are working on a solution. Updates to follow once the issue has been resolved, pending feedback from the teams.
Incident Commander: Barrie James
Remedy INC1063757 PD 387049

 $response.Count
 >1

 #we need response to be an array of strings for Select-string to work.  
 $response.Split("`n").Count
 >3

Мы вызвали метод Split() для переменной $response и разбили его везде, где он видит скрытый символ новой строки 'n PowerShell.

Далее, мы можем использовать символ | pipe для отправки массива строк в Select-String и искать строки с определенной строкой в ​​них.

$response.Split("`n") | select-string "Incident Commander:"

Это анализирует результаты во что-то полезное, показано ниже.

$response.Split("`n") | select-string "Incident Commander:"
IgnoreCase : True
LineNumber : 2
Line       : Incident Commander: Barrie James
Filename   : InputStream
Path       : InputStream
Pattern    : Incident Commander:
Context    : 
Matches    : {0}

Отсюда мы просто выбираем свойство строки, в котором есть текст Incident Commander: Barrie James.

($response.Split("`n") | select-string "Incident Commander:").Line
>Incident Commander: Barrie James

Осталось только избавиться от толстой кишки, что мы и сделаем с помощью метода .Split(). Это будет разбивать строку на отдельные строки, где бы он ни находил символ, который мы предоставляем.

($response.Split("`n") | select-string "Incident Commander:").Line.Split(":")
Incident Commander
 Barrie James

Теперь, чтобы выбрать только второй элемент, который мы делаем с индексированием. Индексирование в PowerShell начинается с нуля (конечно), поэтому мы фактически запрашиваем «элемент с индексом 1», что означает вторую позицию.

($response.Split("`n") | select-string "Incident Commander:").Line.Split(":")[1].Trim()
Barrie James

И вот вам go. Вот как вы это делаете и почему мы делаем каждый шаг.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...