как разбить вывод команды powershell на ключи с значениями (node js) по типу ключ: значение

Итак, имеется команда powershell Get-Vm

Я разбил вывод на массив и получил нужные мне значения. (Методом научного тыка выяснил что мне не нужны первые 3 элемента массива, а последние 2 пустые)


Вывод команды без разбития на массив:


[32;1mName      [0m[32;1m State  [0m [32;1;3mCPUUsage(%)[0m [32;1;3mMemoryAssigned(M)[0m[32;1m Uptime          [0m[32;1m Status            [0m[32;1m Version[0m
[32;1m----      [0m [32;1m-----  [0m [32;1m-----------[0m [32;1m-----------------[0m [32;1m------          [0m [32;1m------            [0m [32;1m-------[0m
Portainer  Running 0           6442              05:50:52.0410000 Работает нормально 11.0
Windows-11 Off     0           0                 00:00:00         Работает нормально 11.0



Вывод команды после разбития на массив:

элементы массива


И очищенный от ненужных строк массив:

очищенный массив


Суть вопроса в том, что бы разбить каждый элемент массива на объект json по типу ключ: значение

Например:

[{
    vm_name: "Portainer",
    vm_state: "Running",
    cpu: "0",
    memory: "6442",
    uptime: "05:50:52.0410000"
    status: "Работает нормально"
    version: "11.0"
},{
    vm_name: "Windows-11",
    vm_state: "Off",
    cpu: "0",
    memory: "0",
    uptime: "00:00:00"
    status: "Работает нормально"
    version: "11.0"
}]

Вот только я понятия не имею как это сделать. Я видел вариант с split(), но не допер, смогу ли я использовать это в своём случае

P.S.: Код избиения массива:

var array = msg.payload
var i
for(i=0; i<3; i++){
    array.shift()
}
array.length = array.length - 2
return msg;

P.P.S.: Кодер из меня такой себе, я ещё только учусь

Если это важно, то проект сделан на Node-RED вот так выглядит последовательность:

Логика


Ответы (1 шт):

Автор решения: ToaD

Спасибо огромное @nörbörnën за помощь (фактически он решил мою проблему)

Всё оказалось куда проще, чем я думал:


Вместо команды Get-Vm и разбивки на массив, мне посоветовали использовать Get-VM -name * | Select-Object -Property Name,State,CPUUsage,MemoryAssigned,Uptime | ConvertTo-Json, что сразу выдало мне нужный ответ.

Так же для правильного отображения вывода команды в node-red я добавил парсер json и получил полный вывод:


[{
    "Name":"Windows-11",
    "State":3,
    "CPUUsage":0,
    "MemoryAssigned":0,
    "Uptime": {
        "Ticks":0,
        "Days":0,
        "Hours":0,
        "Milliseconds":0,
        "Microseconds":0,
        "Nanoseconds":0,
        "Minutes":0,
        "Seconds":0,
        "TotalDays":0,
        "TotalHours":0,
        "TotalMilliseconds":0,
        "TotalMicroseconds":0,
        "TotalNanoseconds":0,
        "TotalMinutes":0,
        "TotalSeconds":0
    }
},{
    "Name":"Portainer",
    "State":2,
    "CPUUsage":0,
    "MemoryAssigned":6591348736,
    "Uptime":{
        "Ticks":269882980000,
        "Days":0,
        "Hours":7,
        "Milliseconds":298,
        "Microseconds":0,
        "Nanoseconds":0,
        "Minutes":29,
        "Seconds":48,
        "TotalDays":0.31236456018518516,
        "TotalHours":7.496749444444444,
        "TotalMilliseconds":26988298,
        "TotalMicroseconds":26988298000,
        "TotalNanoseconds":26988298000000,
        "TotalMinutes":449.80496666666664,
        "TotalSeconds":26988.298
    }
}]

Вот так вот и решилась вся проблема

P.S.: Вот так выглядит итоговая логическая цепочка в Node-RED:

Логика

→ Ссылка