как разбить вывод команды 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 шт):
Спасибо огромное @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:



