【发布时间】:2020-04-18 04:31:18
【问题描述】:
在 PowerShell 中打开 .json 文件后,我得到了一个名为 $json_sitesandsnets 的新 PSObject。最终,我想做的是遍历每个站点(奥兰多、丹佛),并遍历它们的每个子网,然后做一些事情。最初,我需要使用 New-ADReplicationSubnet cmdlet 为 Active Directory 中的相应站点创建这些子网。我已经使用它创建了一个子网,但我有一个更大的站点和子网列表,我将使用它。这个例子只是一个小的精简版发布在这里。一旦我弄清楚如何访问对象值中的这些子网,我可能只是将每个子网列表提供给 New-ADReplicationSubnet。但我真的希望能够循环遍历每个子网以用于其他目的。我想这可能并不难做到,只要你知道怎么做。
这是原始的 json:
{
"Orlando": [
"10.10.10.0/24",
"10.10.20.0/24",
"10.10.30.0/24",
"10.10.40.0/24"
],
"Denver": [
"10.0.70.0/24",
"10.0.80.0/24",
"10.0.90.0/24",
"10.0.100.0/24",
"10.0.110.0/24",
"10.0.120.0/24"
]
}
我得到 PSObject 的属性如下:
$json_sitesandsnets.psobject.properties
当我在 VSCode 中运行 Debug 时,我可以看到 PSObject 和子网列表(数组): seeing this in Debug
这是一些代码,它的名称没有问题(Write-Host $site.Name)。如您所见,我尝试了几种不同的方法来访问这些子网,它们是每个站点的值。我就是想不通。我已经阅读了很多关于循环访问 PSObject 的文章和论坛主题,但似乎无法找到访问和循环访问作为 PSObject 值的数组的最佳答案。我觉得我真的很亲近。
foreach ($site in $json_sitesandsnets.PSObject.Properties) {
Write-Host $site.Name
$site| get-member -type NoteProperty | foreach-object {
$subnet = $site."$($_.Value)"
Write-Host $subnet
Write-Host $_.Value
}
}
【问题讨论】:
-
如果您(在循环内)执行 $site.Value | 会发生什么?通用
-
$site.value 绝对是我需要去的地方。
-
我懒得在我的电脑上设置你的机箱。但我希望 $site.value 是某种带有列表、数组或由 IP 地址组成的东西的容器。然后,您需要编写一个内部循环来一次提取一个并格式化它们。
标签: arrays json powershell loops psobject