【发布时间】:2020-02-06 13:39:45
【问题描述】:
我有一个 PSCustomObject,其中包含如下子对象列表:
vmssSystemUpdatesMonitoringEffect : @{type=String; metadata=; allowedValues=System.Object[]; defaultValue=AuditIfNotExists}
vmssEndpointProtectionMonitoringEffect : @{type=String; metadata=; allowedValues=System.Object[]; defaultValue=AuditIfNotExists}
vmssOsVulnerabilitiesMonitoringEffect : @{type=String; metadata=; allowedValues=System.Object[]; defaultValue=AuditIfNotExists}
systemUpdatesMonitoringEffect : @{type=String; metadata=; allowedValues=System.Object[]; defaultValue=AuditIfNotExists}
systemConfigurationsMonitoringEffect : @{type=String; metadata=; allowedValues=System.Object[]; defaultValue=AuditIfNotExists}
等等
部分对象为 JSON:
{
"vmssSystemUpdatesMonitoringEffect": {
"type": "String",
"metadata": {
"displayName": "System updates on virtual machine scale sets should be installed",
"description": "Enable or disable virtual machine scale sets reporting of system updates"
},
"allowedValues": [
"AuditIfNotExists",
"Disabled"
],
"defaultValue": "AuditIfNotExists"
},
"vmssEndpointProtectionMonitoringEffect": {
"type": "String",
"metadata": {
"displayName": "Endpoint protection solution should be installed on virtual machine scale sets",
"description": "Enable or disable virtual machine scale sets endpoint protection monitoring"
},
"allowedValues": [
"AuditIfNotExists",
"Disabled"
],
"defaultValue": "AuditIfNotExists"
},
"vmssOsVulnerabilitiesMonitoringEffect": {
"type": "String",
"metadata": {
"displayName": "Vulnerabilities in security configuration on your virtual machine scale sets should be remediated",
"description": "Enable or disable virtual machine scale sets OS vulnerabilities monitoring"
},
"allowedValues": [
"AuditIfNotExists",
"Disabled"
],
"defaultValue": "AuditIfNotExists"
}
}
我得到数组的键
$Keys = $Hash | Get-Member -MemberType NoteProperty | Select-Object -ExpandProperty Name
我可以将键放入数组并对其进行迭代,但我无法通过为键提供变量来访问属性:
foreach ($key in $Keys) {
Write-Host "key" $key
$data = $KeyValue.$key
}
结果: 关键 aadAuthenticationInServiceFabricMonitoringEffect
数据为空
但是,这是可行的:
$KeyValue.vmssSystemUpdatesMonitoringEffect
还有这个:
$key= "aadAuthenticationInServiceFabricMonitoringEffect"
$KeyValue.$key
我怎样才能让这个与变量一起工作?
【问题讨论】:
-
如果我在导入您的 json 后查看
$json.vmssEndpointProtectionMonitoringEffect.psobject.Properties.name,它会起作用...如果您在aadAuthenticationInServiceFabricMonitoringEffect上执行.gettype(),那么对象类型是什么? (因为您遇到的问题不在 json 示例中) -
对象类型为 PSCustomObject
-
恐怕在提供可重复的样本之前无法进行诊断。 PSCustomObject 将返回它的成员。也许尝试
Get-Member看看它的属性是否可能不是NoteProperty类型。还要确保aadAuthenticationInServiceFabricMonitoringEffect的路径与$Keyvalue.aadAuthenticationInServiceFabricMonitoringEffect的路径相同,而实际路径是其他路径,例如:$Keyvalue.Me.aadAuthenticationInServiceFabricMonitoringEffect那么这可以解释为什么你没有得到数据。 -
如果您碰巧安装了 Azure Az 模块,那么您可以运行: $Policyset = Get-AzPolicySetDefinition -Name 1f3afdf9-d0c9-4c3d-847f-89da613e70a8 $policyHash = $Policyset.Properties.parameters
-
查看我编辑的答案。这与我在原始答案中公开的原理相同,但我使用了您提供的确切命令并且它正在工作。让我知道我是否误解了您要执行的操作,或者如果它有效,请将其标记为已接受:)
标签: json powershell pscustomobject