Powershell — Получение значений из возвращаемого массива JSON для определенной строки

#powershell #rest #jira-rest-api #invoke-restmethod

#powershell #rest #jira-rest-api #вызов-restmethod

Вопрос:

Прошу прощения за то, что вынужден задать подобный вопрос, пользователь-самоучка powershell здесь. Возникла проблема, из-за которой я, похоже, не могу получить искомое значение из возврата JSON при GET Invoke-RestMethod.

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

Мой код выглядит следующим образом:

 $response = Invoke-RestMethod "https://jira-ceg.atlassian.net/rest/servicedeskapi/request/$JIRATICKET" -Method 'GET' -Headers $headers 

$tester = $response.requestFieldValues


$tester
  

Ответ, который я получаю от JIRA, следующий:

     fieldId           label              value                                                                                                                                                   
-------           -----              -----                                                                                                                                                   
summary           Summary            STAFF-NEW - XXXX- NAME 
customfield_10108 iTrent Information Employee ID: XXXX...                                                                                                                              
customfield_10086 Checklist Text     --- ERROR - No Role Entitlement Found - Contact Service Admin                                                                                           
description       Description        A new employee has joined. Please process with the data above.                                                                                          
customfield_10191 New AD Address     XXXX@XXXXX.com                                                                                                                
                                                                                                                                                
  

Я хочу зафиксировать значение поля customfield_10191, поле иногда тоже может быть пустым, что я протестирую позже в скрипте. Есть идеи, как я мог бы это сделать?

Заранее спасибо!

Ответ №1:

Если $tester это объект со свойствами fieldId , label и value , вы можете использовать комбинацию доступа к члену (синтаксис object.property ) и Where-Object:

 ($tester | Where fieldId -eq 'customfield_10191').value
  

Select-Object также работает:

 $tester | Where fieldId -eq 'customfield_10191' | Select-Object -Expand value
  

Чтобы вернуть объект, содержащий конкретного клиента:

 $tester | Where fieldId -eq 'customfield_10191'
  

Комментарии:

1. Спасибо! Мне удалось заставить это работать сейчас, используя метод select-object. У меня были проблемы с заголовком, который все еще передавался в переменную, но я нашел здесь другую статью, в которой упоминалось -ft removeheader, которая полностью решила мою проблему. Спасибо, теперь скрипт работает отлично!