Объект PowerShell с хеш-таблицей, развернутой в транспонированные столбцы - PullRequest
0 голосов
/ 10 октября 2019

Использование упрощенного документа $ xml, чтобы показать мою проблему…

$xml = [xml]'
<root>
  <Item IDValue="123456" Date="2019-10-01" ItemType="Test">
    <Info Timestamp="2019-10-01T00:00:00+01:00" Value="1"/>
    <Info Timestamp="2019-10-01T00:15:00+01:00" Value="2"/>
    <Info Timestamp="2019-10-01T00:30:00+01:00" Value="3"/>
    <Info Timestamp="2019-10-01T00:45:00+01:00" Value="4"/>
  </Item>
</root>'

Цель состоит в том, чтобы взять узлы Info и транспонировать значение в виде столбцов вместе с атрибутами Item, используя метку времени в качестве отформатированного заголовка столбца. в ЧЧ: мм

Я пробовал вычисленное свойство, которое использует ForEach-Object…

$xml.root.Item | Select-Object IDValue, Date, ItemType, @{N='DataVal';E={$_.Info | ForEach-Object {@{"$((Get-Date $_.Timestamp).ToString('HH:mm'))"=$_.Value}}}}

Сначала я надеялся, что смогу затем расширить «DataVal» в другой Select-Object, чтобыэффективно поворачивать (или транспонировать) значения в столбцы, например,

$xml.root.Item | Select-Object IDValue, Date, ItemType, @{N='DataVal';E={$_.Info | ForEach-Object {@{"$((Get-Date $_.Timestamp).ToString('HH:mm'))"=$_.Value}}}} |
    Select-Object IDValue, Date, ItemType -ExpandProperty DataVal | Format-Table

Но это не работает. Единственный способ получить желаемый результат - это перечислить все возможные временные метки ...

$xml.root.Item | Select-Object IDValue, Date, ItemType, @{N='DataVal';E={$_.Info | ForEach-Object {@{"$((Get-Date $_.Timestamp).ToString('HH:mm'))"=$_.Value}}}} |
    Select-Object IDValue, Date, ItemType,
        @{N='00:00';E={$_.DataVal.'00:00'}},
        @{N='00:15';E={$_.DataVal.'00:15'}},
        @{N='00:30';E={$_.DataVal.'00:30'}},
       @{N='00:45';E={$_.DataVal.'00:45'}} |
    Format-Table

Это не идеально, потому что некоторые xmls измеряют разное время, и их будет многобольше 4! Выше приведена простая урезанная версия

Я думаю, что использование ForEach-Object выводит массив хеш-таблиц, что делает его неподходящим для -ExpandProperty для работы так, как я хочу?

Любое предложение о том, в каком направлении идти отсюда ??

Спасибо

...