从Json文件中获取一些内容

时间:2019-02-04 11:20:22

标签: json powershell

我只需要从JSON内容中获取一些信息,但是使用普通的select-objectwhere-object时,PowerShell提示符什么也没给我。

我做什么:

我从网页获取JSON输出,然后只需要.Content。

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

当要求PowerShell给我一个像$get_all_attributes.Attributes.Slot1这样的特殊对象时,一切都很好。

但是现在我需要获取所有不带Bif的插槽(Slot1-SlotX)(例如,Slot1而不是Slot1Bif)。 之后,我想找到所有残疾人。 但是现在我什至可以净得老虎机。

我用String和其他方式以某种方式将其从Json转换为Json,但是现在我有点卡住了。

漂亮的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 :(得分:1)

您快到了,只需使用开关“ ExpandProperty”即可。

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

此后,最简单的方法是简单地选择您感兴趣的属性以获取所有字段... $get_all_attributes.Attributes.BootSeqRetry

...或针对特定的子属性

更加细化:

$get_all_attributes.Attributes.BootSeqRetry

(在这种情况下,它返回Enabled

答案 1 :(得分:0)

以下代码可以解决您的问题。

$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";