Разбор переменной Powershell - PullRequest
       5

Разбор переменной Powershell

0 голосов
/ 01 ноября 2018

Вы все очень помогли - позвольте мне начать с этого.

Я получаю приведенный ниже вывод из функции, которую я запускаю - данные хранятся в переменной с именем $response, полученной из вызова Invoke-RestMethod.

@{ResourceType=UserStory; Id=202847; Name=Professional Lines: 2,800,000 Policy Aggregate Limit update}    

Как мне разобрать эти значения в новых переменных, чтобы конечный результат был

TP Id:202847 Professional Lines: 2,800,000 Policy Aggregate Limit update

1 Ответ

0 голосов
/ 01 ноября 2018

То, что вы показываете, это строковая форма пользовательского объекта , которая использует hashtable- как текстовое представление .

Определение этого пользовательского объекта выглядит примерно так:

# Construct a custom object with .ResourceType, .Id, and .Name properties.
$response = [pscustomobject] @{
  ResourceType = 'UserStory'
  Id = 202847
  Name = 'Professional Lines: 2,800,000 Policy Aggregate Limit update'
}

Если вы включите эту переменную в расширяемую строку (интерполирующую строку), вы получите представление в своем вопросе [1] :

PS> "$response"  # Note the enclosing "..."
@{ResourceType=UserStory; Id=202847; Name=Professional Lines: 2,800,000 Policy Aggregate Limit update}

Обратите внимание, что без вложенного "..." вы получите более качественное табличное представление благодаря системе форматирования вывода PowerShell.

PS> $response  # direct output of the object

ResourceType     Id Name
------------     -- ----
UserStory    202847 Professional Lines: 2,800,000 Policy Aggregate Limit update

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

PS> "TP Id:$($response.Id) $($response.Name)"
TP Id:202847 Professional Lines: 2,800,000 Policy Aggregate Limit update

Обратите внимание на необходимость использования $(...) вокруг ссылок на свойства - см. этот ответ для краткого изложения правил расширения строк PowerShell.


Альтернативный подход заключается в использовании оператора -f , который использует строки форматирования, такие как метод .NET String.Format():

PS> 'TP ID:{0} {1}' -f $response.Id, $response.Name
TP ID:202847 Professional Lines: 2,800,000 Policy Aggregate Limit update

[1] Вы также можете получить это представление, вызвав .psobject.ToString() для пользовательского объекта; любопытно, что .ToString() не работает, как в PowerShell Core 6.1.0; это удивительное несоответствие обсуждается в этом выпуске GitHub .

...