Powershell Как извлечь значение хеш-таблицы из вложенной хеш-таблицы - PullRequest
0 голосов
/ 29 мая 2020

Я сделал запрос API к базе данных технической поддержки ManageEngine, которая возвращает ответ JSON, который возвращается как настраиваемый объект из трех таблиц ha sh: $ result.response_status, $ result.list_info, и $ result.requests Третий из них содержит данные, которые я ищу.

$results.requests.id целое число

$results.requests.subject строка

$results.requester хеш-таблица.

Запросчик ha sh таблица: @requester{name= 'Martin Zimmerman'; email='mzimmer@company.com'}

То, что я хотел бы сделать, это:

$results.requests | select id, subject, requester.name  

, чтобы отобразить одну строку идентификатор, тема и имя запрашивающего

id   subject         name
--   --------------  --------------
3329 Can't open file Martin Zimmerman 

Однако я не могу определить номенклатуру для извлечения значения ключа имени в таблице ha sh запрашивающей стороны.

Ответы [ 2 ]

1 голос
/ 29 мая 2020

Думаю, это то, что вам нужно. Вам необходимо создать вычисляемое свойство (пример 10).

$results.requests | Select-Object id,subject,@{l='name';e={$_.requester['name']}}

Этот подход позволяет вызывать ключ имени из хэш-таблицы.

EDIT

Если ваш requester элемент является PSCustomObject, попробуйте следующее.

$results.requests | Select-Object id,subject,@{l='name';e={$_.requester.name}}

Протестируйте с аналогичной структурой объекта.

$results = New-Object psobject
$requests = New-Object psobject
$requests | Add-Member -MemberType NoteProperty -Name id -Value 2
$requests | Add-Member -MemberType NoteProperty -Name subject -Value "lol"
$hash = @{}
$hash.Add("email","mzimmerman@company.com")
$hash.Add("name","Martin Zimmerman")
$requests | Add-Member -MemberType NoteProperty -Name requester -Value $hash
$results | Add-Member -MemberType NoteProperty -Name requests -Value $requests
$results.requests | select id,subject,@{l='name';e={$_.requester['name']}}

id subject name
-- ------- ----
 2 lol     Martin Zimmerman
0 голосов
/ 01 июня 2020

A sh ... Большое спасибо за ваши ответы, действительно, первая однострочная строка корректно работала с вычисленным свойством после того, как я начал заново.

$results.requests | Select-Object id,subject,@{l='name';e={$_.requester.name}}

Я думаю, что моя проблема могла заключаться в следующем:

В итоге я сохранил вывод вызова API в виде строки, или я ссылался на другую переменную. Короче .... это была действительно глупая ошибка с моей стороны. Интересно само понятие вычисляемого свойства ... с чем я раньше не сталкивался. Большое спасибо за вашу помощь!

...