在Powershell中取消分组

时间:2015-11-25 16:55:44

标签: powershell grouping rows

我使用以下内容获取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中找到与取消分组相关的任何信息。

2 个答案:

答案 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
  }
}