Предполагая, что вы присваиваете ответ этого 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. Вот как вы это делаете и почему мы делаем каждый шаг.