Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.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中使用逗号列表连接和分组2个表?_Powershell_Powershell 2.0 - Fatal编程技术网

如何在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