在谈到PS脚本时,我是一个绝对的初学者,我为一件简单的事情而苦苦挣扎:遍历PSObject项以将它们组合成1个数组。
我已经编写了一个基于Invoke-RestMethod
的简单脚本,该脚本将为我使用的一种服务获取DNS配置。
我从他们的API获得的输出是JSON,当被Invoke-RestMethod
使用时,它被转换成具有以下结构的customPSObject:
当前,我正在使用以下代码来获取结果:
$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
答案 0 :(得分:0)
可以通过将它们组合成一个大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