Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Powershell中取消分组_Powershell_Grouping_Rows - Fatal编程技术网

在Powershell中取消分组

在Powershell中取消分组,powershell,grouping,rows,Powershell,Grouping,Rows,我使用下面的方法来获取广告站点和子网的列表,但是它目前正在将每个站点的多个子网分组为一行。我希望每个子网都有一行,包括站点名和广告控制器 $Sites = [System.DirectoryServices.ActiveDirectory.Forest]::GetCurrentForest().Sites $AllSites = @() foreach ($Site in $Sites) { $obj = New-Object -Type PSObject -Property (

我使用下面的方法来获取广告站点和子网的列表,但是它目前正在将每个站点的多个子网分组为一行。我希望每个子网都有一行,包括站点名和广告控制器

$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

我知道如何使用
Group Object
cmdlet,并天真地假设可能存在un Group cmdlet,但我在PowerShell中找不到一个或任何与取消分组相关的信息。

展开分组对象的
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 ','
    }
  }
}

可以使用“选择对象展开属性”展开单个属性;但是,这不会为每个子网提供一行。为此,您需要构建第二个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
  }
}
第一个选择“选择对象-扩展组”正是我所需要的。非常感谢@Ansgar Wiechers