Предполагая, что у вас есть объект, который выглядит примерно так:
$KeyValue = @{
vmssSystemUpdatesMonitoringEffect = @{
type='String';
metadata='';
allowedValues=@(1,2,3);
defaultValue='AuditIfNotExists'}
}
У нас по существу есть пара ключ-значение, в которой верхний уровень содержит только один ключ, vmssSystemUpdatesMonitoringEffect
, со значением его собственная вложенная хеш-таблица.
Мы можем довольно легко разобраться в этом, сначала ища и .Keys
в хеш-таблице, а затем foreach
из них, ища любые .Keys
там и получая их значения.
$KeyValue = @{vmssSystemUpdatesMonitoringEffect = @{type='String'; metadata=''; allowedValues=@(1,2,3); defaultValue='AuditIfNotExists'}}
foreach($key in $KeyValue.Keys){
$nestedKeys = $KeyValue.$key.Keys
"parsing node $key in `$KeyValue` which has $($nestedKeys.Count) nested keys"
foreach($nestedkey in $nestedKeys){
"--parsing nested key $nestedKey"
"--$($KeyValue.$key.$nestedKey)"
}
}
Что даст нам вывод:
parsing node vmssSystemUpdatesMonitoringEffect in $KeyValue which has 4 nested keys
--parsing nested key defaultValue
--AuditIfNotExists
--parsing nested key allowedValues
--1 2 3
--parsing nested key type
--String
--parsing nested key metadata
--
Это должно помочь вам начать путь, который вас интересует.
Если у вас есть объект PSCustomObject, который содержит хеш-таблицу
Во-первых, мне так жаль, что вы оказались в этой боли.
Во-вторых, вы должны использовать два метода для перечисления узлов вашего нечестивого ублюдочного объекта. если вы в этом случае.
$KeyValue = [pscustomobject]@{vmssSystemUpdatesMonitoringEffect = @{type='String'; metadata=''; allowedValues=@(1,2,3); defaultValue='AuditIfNotExists'}}
$keys = get-member -InputObject $keyvalue -MemberType NoteProperty
foreach($key in $keys){
$nestedKeys = $KeyValue.$($key.Name).Keys
"parsing node $($key.Name) in `$KeyValue` which has $($nestedKeys.Count) nested keys"
foreach($nestedkey in $nestedKeys){
"--parsing nested key $nestedKey"
"--$($KeyValue.$($key.Name).$nestedKey)"
}
}
Большая разница в том, что нам нужно получить все ключи с помощью командлета Get-Member
и указать, что мы хотим получить элементы с типом NoteProperty
. Это дает нам все свойства CustomObject, которые мы затем рассмотрим, ища хеш-таблицы со свойствами.
Следующий набор странностей идет с этой строкой $nestedKeys = $KeyValue.$($key.Name).Keys
, которая использует оператор subExpression PowerShell для запуска запуска элемента в пределах символов $( )
и обработки вывода как строки. Это похоже на выполнение $KeyValue.vmssSystemUpdatesMonitoringEffect.Keys
.
Кроме того, синтаксис в основном тот же.