Powershell для JSON - PullRequest
       2

Powershell для JSON

0 голосов
/ 24 мая 2019

Я сделал этот скрипт в powershell для сбора некоторой информации с компьютера, и мне нужно экспортировать в формат JSON с некоторыми спецификациями

$osinfo = Get-WmiObject Win32_OperatingSystem -ErrorAction STOP | 
            Select-Object @{Name='computername';Expression={$_.CSName}};

Write-Host "Computer_INfo:" 
$osinfo | ConvertTo-Json  

$rede = Get-WmiObject -Class Win32_NetworkAdapterConfiguration -ErrorAction STOP | where-object -FilterScript {$_.IPEnabled -eq $true} | Select-Object @{Name='Description';Expression={$_.Description}},
          @{Name='IP_Address';Expression={$_.IPAddress[0]}};

Write-Host "LAN_INfo:"
$rede | ConvertTo-Json

В результате этой команды генерируется этот JSON

Computer_INfo:
{
"computername":  "DESKTOP-PCJTTEG"
}
LAN_INfo:
[
{
    "Description":  "Hyper-V Virtual Ethernet Adapter",
    "IP_Address":  "192.168.65.241"
},
{
    "Description":  "Hyper-V Virtual Ethernet Adapter #2",
    "IP_Address":  "192.168.10.104"
}
]

Я хотел, чтобы это было так.

{Computer_Info:
[
{
"computername":  "DESKTOP-PCJTTEG"
}
]
},LAN_INfo:{
[
{
    "Description":  "Hyper-V Virtual Ethernet Adapter",
    "IP_Address":  "192.168.65.241"
},
{
    "Description":  "Hyper-V Virtual Ethernet Adapter #2",
    "IP_Address":  "192.168.10.104" }
]
}

1 Ответ

2 голосов
/ 24 мая 2019

Вы можете определить структуру вашего Json, спроектировав свой объект PSCustomObject так, как вы хотите. Чтобы иметь массивы, даже если у вас есть 1 элемент, добавьте конструктор массива @(). При преобразовании в json il перенесет в ваш отсутствующий []

Глубина по умолчанию при конвертации в Json составляет 4, которую можно настроить до 100 слоев. Что касается вашего вывода, я настроил его, чтобы не пропустить какой-либо контент в конечном выводе.

Вот ваш код с отображаемым выводом, который вы искали.

$osinfo = Get-WmiObject Win32_OperatingSystem -ErrorAction STOP | 
Select-Object @{Name = 'computername'; Expression = { $_.CSName } };

$rede = Get-WmiObject -Class Win32_NetworkAdapterConfiguration -ErrorAction STOP | where-object -FilterScript { $_.IPEnabled -eq $true } | 
Select-Object @{Name = 'Description'; Expression = { $_.Description } },
@{Name = 'IP_Address'; Expression = { $_.IPAddress[0] } };

[PSCustomObject]@{
    Computer_Info = @(
        $osinfo,
        @{'LAN_INfo' = $rede }
    )
} | ConvertTo-Json -Depth 10
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...