Преобразовать таблицу powershell в json со столбцом 1 в качестве ключа и столбцом 2 в качестве значения - PullRequest
0 голосов
/ 14 ноября 2018

Я пытаюсь создать словарь JSON из объекта powershell с форматированием, которое командлет ConvertTo-Json не предоставляет по умолчанию.

Например, ConvertTo-Json примет вывод

(get-counter '\Process(*)\% Processor Time').CounterSamples | select InstanceName, CookedValue

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

InstanceName        CookedValue
------------        -----------
idle             92.02923730929
process1                      3
process2                      1
process3                      0
process4                      2
process5                      0
process6                      2
process7                      0
....                       ....

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

[
{
    "InstanceName":  "idle",
    "CookedValue":  92.02923730929
},
{
    "InstanceName":  "process1",
    "CookedValue":  3
},
{
    "InstanceName":  "process2",
    "CookedValue":  1
},
...
]

Возможно ли вместо этого отформатировать объект JSON следующим образомэто?

1014

Спасибо

Ответы [ 2 ]

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

Создайте новый объект со свойствами, составленными из значений свойств образца:

$properties = @{}
(Get-Counter '\Process(*)\% Processor Time').CounterSamples |ForEach-Object {
    $properties[$_.InstanceName] = $_.CookedValue
}
New-Object psobject -Properties $properties |ConvertTo-Json

Поскольку у вас может быть несколько экземпляров с одним и тем же именем процесса, вы можете вместо этого извлечь имя процесса и номер экземпляра из счетчика Path:

$properties = @{}
(Get-Counter '\Process(*)\% Processor Time').CounterSamples |ForEach-Object {
    $InstanceName = if($_.Path -match 'process\((.*#\d+)\)'){
        $Matches[1]
    } 
    else {
        $_.InstanceName
    }
    $properties[$InstanceName] = $_.CookedValue
}
New-Object psobject -Property $properties |ConvertTo-Json
0 голосов
/ 14 ноября 2018

просто отправь трубку на ConvertTo-Json

(get-counter '\Process(*)\% Processor Time').CounterSamples | select InstanceName, CookedValue | ConvertTo-Json

Я не могу ответить на ваш второй вопрос о переформатировании вывода JSON

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...