заполнение DataTable из PSObject - PullRequest
       1

заполнение DataTable из PSObject

0 голосов
/ 14 октября 2019

Я абсолютный новичок, когда дело доходит до сценариев PS, и я тяжело борюсь с тем, что считаю простым: перебираю элементы PSObject, чтобы объединить их в 1 массив.

Я написал простое Invoke-RestMethod основанный скрипт, который извлечет мне конфигурацию DNS для одной из служб, которые я использую. Вывод, который я получаю от их API, - это JSON, который (при использовании Invoke-RestMethod) превращается в customPSObject со следующей структурой:

  • dns
    • dkim1
      • действительный
      • хост
      • тип
      • данные
    • dkim2
      • действительный
      • хост
      • тип
      • данные
    • имя_домена
      • действительный
      • хост
      • тип
      • data
    • имя_хозяина
      • действительный
      • host
      • тип
      • data
    • mail_cname
      • действительный
      • хост
      • тип
      • data

В настоящее время я использую следующий код для получения результатов:

$res = Add-SGAuthDomains $SGapiKeyName $SGsubUserName

$strng = $res.Body.dns.dkim1 | Out-String
Write-Host $strng

$strng = $res.Body.dns.dkim2 | Out-String
Write-Host $strng
(...)

, но, как вы можете видеть, это создает отдельные таблицы. Я хотел бы, чтобы все эти результаты были в одной таблице.

Я пытался использовать DataTable согласно приведенному ниже коду,

$dnsConf = New-Object System.Data.DataTable
[void]$dnsConf.Columns.Add("valid")
[void]$dnsConf.Columns.Add("host")
[void]$dnsConf.Columns.Add("type")
[void]$dnsConf.Columns.Add("data")

foreach ($item in $res.Body.dns) {
    $($item | Get-Member -MemberType *Property).Value
    [void]$dnsConf.Rows.Add($item.valid, $item.host, $item.type, $item.data)
}

$dnsConf | Format-Table

, но это не дало никаких результатов. выход. Что я делаю не так?

Это вывод, который я получаю:

valid type  host                    data
----- ----  ----                    ----
False cname em9570.justchecking.xyz u13091771.wl022.sendgrid.net


valid type  host                           data
----- ----  ----                           ----
False cname s1._domainkey.justchecking.xyz s1.domainkey.u13091771.wl022.sendgrid.net


valid type  host                           data
----- ----  ----                           ----
False cname s2._domainkey.justchecking.xyz s2.domainkey.u13091771.wl022.sendgrid.net


valid type  host                     data
----- ----  ----                     ----
False cname url3844.justchecking.xyz sendgrid.net


valid type  host                      data
----- ----  ----                      ----
False cname 13091771.justchecking.xyz sendgrid.net

, и вот как я бы хотел, чтобы это было:

valid type  host                    data
----- ----  ----                    ----
False cname em9570.justchecking.xyz u13091771.wl022.sendgrid.net
False cname s1._domainkey.justchecking.xyz s1.domainkey.u13091771.wl022.sendgrid.net
False cname s2._domainkey.justchecking.xyz s2.domainkey.u13091771.wl022.sendgrid.net
False cname url3844.justchecking.xyz sendgrid.net
False cname 13091771.justchecking.xyz sendgrid.net

1 Ответ

0 голосов
/ 14 октября 2019

Выбор свойств из разных объектов может быть сделан путем объединения их в один большой array. Это будет работать только тогда, когда все объекты в array имеют одинаковые свойства.

$res = @{
    Body = @{
        dns = @{
            dkim1 = @(
                [PSCustomObject]@{
                    valid = $false
                    type  = 'dkms1 name A'
                    host  = 'dkms1 host A'
                    data  = 'dkms1 data A'
                }
                [PSCustomObject]@{
                    valid = $false
                    type  = 'dkms1 name B'
                    host  = 'dkms1 host B'
                    data  = 'dkms1 data B'
                }
            )
            dkim2 = @(
                [PSCustomObject]@{
                    valid = $false
                    type  = 'dkms2 name A'
                    host  = 'dkms2 host A'
                    data  = 'dkms2 data A'
                }
                [PSCustomObject]@{
                    valid = $false
                    type  = 'dkms2 name B'
                    host  = 'dkms2 host B'
                    data  = 'dkms2 data B'
                }
            )
        }
    }
}

@($res.Body.dns.dkim1, $res.Body.dns.dkim2) | Format-Table

В результате:

valid type         host         data
----- ----         ----         ----
False dkms1 name A dkms1 host A dkms1 data A
False dkms1 name B dkms1 host B dkms1 data B
False dkms2 name A dkms2 host A dkms2 data A
False dkms2 name B dkms2 host B dkms2 data B
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...