如何在Powershell中使用逗号列表连接和分组2个表?
我有两个数组,其中包含以下对象:如何在Powershell中使用逗号列表连接和分组2个表?,powershell,powershell-2.0,Powershell,Powershell 2.0,我有两个数组,其中包含以下对象: $dataset1 = @( @{ MachineName = "AAA" ID = "111" }, @{ MachineName = "BBB" ID = "222" }, @{ MachineName = "CCC"
$dataset1 = @(
@{
MachineName = "AAA"
ID = "111"
},
@{
MachineName = "BBB"
ID = "222"
},
@{
MachineName = "CCC"
ID = "111"
},
@{
MachineName = "DDD"
ID = "333"
},
@{
MachineName = "EEE"
ID = "111"
}
)
$dataset2 = @(
@{
ID = "111"
TagName = "ALPHA2"
},
@{
ID = "222"
TagName = "ALPHA0"
},
@{
ID = "333"
TagName = "ALPHA8"
},
@{
ID = "444"
TagName = "ALPHA29"
},
)
现在我想创建一个数组,它有一个标记名对象,每个标记名对象都应该包含一个用逗号分隔的机器名列表,如下所示:
TagName | MachineName
ALPHA2 AAA,CCC,EEE
ALPHA0 BBB
ALPHA8 DDD
这是我尝试过的代码:
$Joined= Foreach ($row in $dataset1)
{
[pscustomobject]@{
ID = $row.ID
MachineName = $row.MachineName -join ','
TagName = $dataset2 | Where-Object {$_.ID -eq $row.ID} | Select-Object -ExpandProperty TagName
}
}
但它不是生成机器名的逗号列表,而是为每个机器名打印单独的行。我将迭代
$dataset2
,而不是$dataset1
$joined = foreach($row in $dataset2){
[PSCustomObject]@{
TagName = $row.tagname
MachineName = ($dataset1 | Where-Object id -eq $row.id).MachineName -join ','
}
}
如果您试图排除$dataset1
中那些在$dataset2
中没有相应条目的条目,请更改为此
$joined = foreach($row in $dataset2 | Where-Object id -in $dataset1.id){
[PSCustomObject]@{
TagName = $row.tagname
MachineName = ($dataset1 | Where-Object id -eq $row.id).MachineName -join ','
}
}
它不是生成机器名的逗号列表,而是为每个机器名打印单独的行
这实际上是一个很好的起点
只需通过管道将结果对象传输到组对象
,并从每个结果组中提取机器名称:
$joined |Group-Object TagName |Select Name,@{Name='Machines';Expression = {$_.Group.MachineName -join ','}}
这会给你一些类似的东西:
Name Machines
---- --------
ALPHA2 AAA,CCC,EEE
ALPHA0 BBB
ALPHA8 DDD