Просто извлеките контент из файла Json - PullRequest
0 голосов
/ 04 февраля 2019

Мне нужно получить только некоторую информацию из моего содержимого JSON, но с обычными select-object и where-object мое приглашение PowerShell ничего не дает.

Что я делаю:

Iполучить вывод JSON с веб-страницы, а затем нужен только .Content.

$get_all_attributes = $result.Content | Out-String | ConvertFrom-Json | Select Attributes

При запросе PowerShell дать мне один конкретный объект, например $get_all_attributes.Attributes.Slot1, все в порядке.

Но теперь янужно получить все слоты (Slot1 - SlotX) без Bif (например, Slot1, но не Slot1Bif).После этого мне нравится находить всех инвалидов.Но сейчас я даже получаю чистые слоты.

Я каким-то образом преобразовал его из Json в String и так далее, но теперь я немного застрял.

Приятно выглядящий JSON

{
"Attributes":  {
                   "AcPwrRcvry":  "Last",
                   "AcPwrRcvryDelay":  "Immediate",
                   "AesNi":  "Enabled",
                   "AssetTag":  "",
                   "BootMode":  "Uefi",
                   "BootSeqRetry":  "Enabled",
                   "CollaborativeCpuPerfCtrl":  "Disabled",
                   "ConTermType":  "Vt100Vt220",
                   "ControlledTurbo":  "Disabled",
                   "Slot1":  "Enabled",
                   "Slot1Bif":  "DefaultBifurcation",
                   "Slot2":  "Enabled",
                   "Slot2Bif":  "DefaultBifurcation",
                   "Slot3":  "Enabled",
                   "Slot3Bif":  "DefaultBifurcation",
                   "Slot4":  "Enabled",
                   "Slot4Bif":  "DefaultBifurcation",
                   "Slot5":  "Enabled",
                   "Slot5Bif":  "DefaultBifurcation",
                   "Slot6":  "Enabled",
                   "Slot6Bif":  "DefaultBifurcation",
                   "Slot7":  "Enabled",
                   "Slot7Bif":  "DefaultBifurcation"
               }
}

Мои конвертированные вещи

$get_all_attributes | FL

Attributes : @{AcPwrRcvry=Last; AcPwrRcvryDelay=Immediate; AesNi=Enabled; AssetTag=; BootMode=Uefi; BootSeqRetry=Enabled; CollaborativeCpuPerfCtrl=Disabled; 
         ConTermType=Vt100Vt220; ControlledTurbo=Disabled; CorrEccSmi=Enabled; CpuInterconnectBusLinkPower=Enabled; CurrentEmbVideoState=Enabled; 
         DcuIpPrefetcher=Enabled;Slot1=Enabled; Slot1Bif=DefaultBifurcation; Slot2=Enabled; Slot2Bif=DefaultBifurcation; Slot3=Enabled; Slot3Bif=DefaultBifurcation; Slot4=Enabled; 
         Slot4Bif=DefaultBifurcation; Slot5=Enabled; Slot5Bif=DefaultBifurcation; Slot6=Enabled; Slot6Bif=DefaultBifurcation; Slot7=Enabled; 
         Slot7Bif=DefaultBifurcation}

Ответы [ 2 ]

0 голосов
/ 04 февраля 2019

Вы почти у цели, просто используйте переключатель "ExpandProperty".

$get_all_attributes = $result.Content | Out-String | ConvertFrom-Json | Select -ExpandProperty Attributes

После этого самый простой способ - просто выбрать интересующее вас свойствочтобы получить все поля ... $get_all_attributes.Attributes.BootSeqRetry

... или получить более детализированный для определенного под-свойства :

$get_all_attributes.Attributes.BootSeqRetry

(В этом случае возвращается Enabled)

0 голосов
/ 04 февраля 2019

Следующий код должен решить вашу проблему.

$attributes = $get_all_attributes.Attributes;
$filteredAttributes = $attributes | Select-Object -Property "slot*" -ExcludeProperty "*Bif";
$slots = @{};
$filteredAttributes.psobject.properties | Foreach { $slots[$_.Name] = $_.Value };
$disabledSlots = $slots.GetEnumerator() |? Value -eq "Disabled";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...