Получить значения из массива, который является типом PSCustomObject - PullRequest
0 голосов
/ 22 февраля 2019

Я пытаюсь получить значения из PSCustomObject и не могу найти правильный путь.

PS: $val
  entry1 : @{order=10; isConditionalDeploy=1; isDropExtendedProperties=0}
  entry2 : @{order=20; isConditionalDeploy=1; isDropExtendedProperties=0}
  entry3 : @{order=30; isConditionalDeploy=1; isDropExtendedProperties=0}

PS: $val.GetType()
  IsPublic IsSerial Name     BaseType
  -------- -------- ----     --------
  True     True     Object[] System.Array

PS: $val[0]
  entry1 : @{order=10; isConditionalDeploy=1; isDropExtendedProperties=0}
  entry2 : @{order=20; isConditionalDeploy=1; isDropExtendedProperties=0}
  entry3 : @{order=30; isConditionalDeploy=1; isDropExtendedProperties=0}

PS: $val[0].GetType()
  IsPublic IsSerial Name           BaseType
  -------- -------- ----           --------
  True     False    PSCustomObject System.Object

Все способы, которые я пробовал, всегда дают один и тот же результат.Я пытался получить значения из $val.PSObject, но безуспешно

ОБНОВЛЕНИЕ:

$val | gm
Name              MemberType   Definition
----              ----------   ----------
Equals            Method       bool Equals(System.Object obj)
GetHashCode       Method       int GetHashCode()
GetType           Method       type GetType()
ToString          Method       string ToString()
entry1            NoteProperty System.Management.Automation.PSCustomObject entry1=@{order=10; isConditionalDeploy=1;
entry2            NoteProperty System.Management.Automation.PSCustomObject entry2=@{order=20; isConditionalDeploy=1; 
entry3            NoteProperty System.Management.Automation.PSCustomObject entry3=@{order=30; isConditionalDeploy=1; 

Ответы [ 3 ]

0 голосов
/ 22 февраля 2019

Если вы просто пытаетесь получить доступ к значениям, это должно работать:

$json = '{
"entry1":
    {
        "order":"10",
        "isConditionalDeploy":"1",
        "isDropExtendedProperties":"0"
    },
"entry2":
    {
        "order":"20",
        "isConditionalDeploy":"1",
        "isDropExtendedProperties":"0"
    }
}'

$val = $json | ConvertFrom-Json

$val | ForEach-Object {
    $_.PSObject.Properties.Value
}

Вывод

order isConditionalDeploy isDropExtendedProperties
----- ------------------- ------------------------
10    1                   0
20    1                   0
0 голосов
/ 22 февраля 2019

Если у вас есть массив PSCustomObject, вы сможете увидеть значения, отправив массив в Format-List или Format-Table.

0 голосов
/ 22 февраля 2019

Чтобы получить список всех имен свойств, выполните следующее:

$val.psobject.properties.name

Чтобы получить список всех значений свойств, выполните следующее:

$val.psobject.properties.value

Так как$val.psobject.properties.name и $val.psobject.properties.name - массивы, их элементы доступны по индексу.Так что, если вы хотели получить имя и первое значение, к ним могут обращаться $val.psobject.properties.name[0] и $val.psobject.properties.value[0].

Если вы уже знаете имена свойств и просто хотите значения, вы можете получить доступ к значениям, следуя тому, что Теопредложил.

Я создал файл JSON и назвал его json.json.Он содержит следующее:

{
"entry1":
    {
        "order":"10",
        "isConditionalDeploy":"1",
        "isDropExtendedProperties":"0"
    },
"entry2":
    {
        "order":"20",
        "isConditionalDeploy":"1",
        "isDropExtendedProperties":"0"
    }
}

Следующие результаты приводят к созданию переменной $val, которая выглядит как ваша:

$val = Get-Content json.json | ConvertFrom-Json
$val | fl

entry1 : @{order=10; isConditionalDeploy=1; isDropExtendedProperties=0}
entry2 : @{order=20; isConditionalDeploy=1; isDropExtendedProperties=0}

$val | gm

   TypeName: System.Management.Automation.PSCustomObject

   TypeName: System.Management.Automation.PSCustomObject

    Name        MemberType   Definition
    ----        ----------   ----------
    Equals      Method       bool Equals(System.Object obj)
    GetHashCode Method       int GetHashCode()
    GetType     Method       type GetType()
    ToString    Method       string ToString()
    entry1      NoteProperty Object[] entry1=System.Object[]
    entry2      NoteProperty Object[] entry2=System.Object[]

При выполнении всего вышеперечисленного, имя и значение моего свойствапоисковые работы, как я предложил.Можете ли вы предоставить содержимое файла JSON?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...