У меня есть 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.vmssEndpointProtectionMonitoringEffect.psobject.Properties.name
после импорта вашего json, он сработает... Если вы сделаете.gettype()
наaadAuthenticationInServiceFabricMonitoringEffect
, какой тип объекта? (поскольку того, с которым у вас проблемы, нет в образце json) - person Sage Pourpre   schedule 06.02.2020Get-Member
, чтобы увидеть, могут ли его свойства быть несколько не типаNoteProperty
. Также убедитесь, что путь кaadAuthenticationInServiceFabricMonitoringEffect
хорош, как если бы вы делали$Keyvalue.aadAuthenticationInServiceFabricMonitoringEffect
, а фактический путь был другим, например:$Keyvalue.Me.aadAuthenticationInServiceFabricMonitoringEffect
, тогда это объясняет, почему вы не получаете данные. - person Sage Pourpre   schedule 06.02.2020