我只需要从JSON内容中获取一些信息,但是使用普通的select-object
和where-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}
答案 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";