我使用以下内容获取AD站点和子网的列表,但是它当前正在将每个站点的多个子网分组为一行。我希望每个子网都有一行,还有SiteName和AD Controller。
<script src="https://cdnjs.cloudflare.com/ajax/libs/prefixfree/1.0.7/prefixfree.min.js"></script>
<svg class="spinner">
<circle cx="23" cy="23" r="20" />
</svg>
我知道如何使用$Sites = [System.DirectoryServices.ActiveDirectory.Forest]::GetCurrentForest().Sites
$AllSites = @()
foreach ($Site in $Sites) {
$obj = New-Object -Type PSObject -Property (
@{
"SiteName" = $site.Name;
"SubNets" = $site.Subnets;
"Servers" = $Site.Servers
}
)
$AllSites += $obj
}
$AllSites | Out-GridView
cmdlet并天真地假设可能存在非组cmdlet,但我无法在PowerShell中找到与取消分组相关的任何信息。
答案 0 :(得分:2)
展开分组对象的Group
属性以取消分组:
... | Select-Object -Expand Group
但是,我怀疑您实际上并不想取消组合对象,而是将服务器和子网列表扩展为字符串表示形式。假设它们是字符串数组,您只需加入这些数组:
$AllSites = foreach ($Site in $Sites) {
New-Object -Type PSObject -Property @{
'SiteName' = $Site.Name
'SubNets' = $Site.Subnets -join ','
'Servers' = $Site.Servers -join ','
}
}
要为每个子网获得一行,您将遍历外部循环内的子网:
$AllSites = foreach ($Site in $Sites) {
$Site.Subnets | ForEach-Object {
New-Object -Type PSObject -Property @{
'SiteName' = $Site.Name
'SubNet' = $_
'Servers' = $Site.Servers -join ','
}
}
}
答案 1 :(得分:0)
您可以使用Select-Object-ExpandProperty扩展单个属性;但是,每个子网不会给你一行。为此,您需要构建第二个for循环来遍历每个子网并构建一个新对象:
foreach ($Site in $Sites) {
foreach($subnet in $Site.Subnets) {
$obj = New-Object -Type PSObject -Property @{
"SiteName" = $site.Name;
"SubNets" = $subnet;
"Servers" = $Site.Servers
}
$AllSites += $obj
}
}