Как создать собственную хеш-таблицу с массивами объектов - powershell / cmd - PullRequest
0 голосов
/ 05 июля 2019

Попытка взять несколько объектов из класса, используя get-WmiObject. Я должен вернуть это как тип хэш-таблицы / dict.

Используемая мной команда:


get-WmiObject -class win32_SoundDevice | select-object Name, Status

Что я получаю:

Name                   Status
----                   ------
Intel(R) Display Audio OK
Realtek Audio          OK

Я хочу создать что-то похожее на это:

[
    {
        "Name":  "Intel(R) Display Audio",
        "Status":  "OK"
    },
    {
        "Name":  "Realtek Audio",
        "Status":  "OK"
    }
]

Я знаю, что могу добавить команду | convertTo-json к исходной команде, но я хочу создать хэш-таблицу с нуля, так как я буду использовать ее в устаревших системах, которые могут не использовать команду convertTo-json.

Ответы [ 2 ]

2 голосов
/ 05 июля 2019

Если вы не можете использовать командлет ConvertTo-Json, это должно помочь:

function ConvertTo-Json20([object] $item){
    # serializes object(s) to JSON. The result will be in compressed format.
    Add-Type -AssemblyName System.Web.Extensions

    $jsSerializer = New-Object System.Web.Script.Serialization.JavascriptSerializer
    return $jsSerializer.Serialize($item)
}


# When using 'Select-Object Name, Status' you will get an array of PSObjects which the above function 
# cannot handle. Therefore, I'm using Old-School to get the results from the Get-WmiObject cmdlet
# into an array of Hashtables.

$result = Get-WmiObject -Class win32_SoundDevice | ForEach-Object {
    @{
        'Name' = $_.Name
        'Status' = $_.Status
    }
}

ConvertTo-Json20 $result

На моем компьютере результат будет

[{"Name": "ConexantISST Audio "," Status ":" OK "}, {" Name ":" Intel (R) Display Audio "," Status ":" OK "}]

1 голос
/ 05 июля 2019

Чтобы сериализовать объект PowerShell в выражение PowerShell, вы могли бы рассмотреть этот ConvertTo-Expression командлет:

ConvertTo-Expression (get-WmiObject -class win32_SoundDevice | select-object Name, Status)

Результат:

[PSCustomObject]@{
        'Name' = 'USB Multi-Channel Audio Device'
        'Status' = 'OK'
},
[PSCustomObject]@{
        'Name' = 'High Definition Audio Device'
        'Status' = 'OK'
},
[PSCustomObject]@{
        'Name' = 'High Definition Audio Device'
        'Status' = 'OK'
}

Подробнеесм. информацию: Сохранить хеш-таблицу в нотации объектов PowerShell (PSON)

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