在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