2

我有一个如下的 CSV:

location,id
loc1,1234
loc1,1235
loc1,1236

运行 $a = Import-CSV C:\File.csv | 组对象“位置”我得到以下输出:

Count  Name    Group
-----  ----    -----
3      loc1    {@{location=loc1; id=1234}, @{location=loc1; id=1235), @{location=loc1, id=1236}}

我想将所有 ID 添加到一个组中(使用 Add-QADGroupMember),但我不知道如何为 $loc1 获取一组 ID。似乎正确地将它们分组,但我似乎无法将输出解析为单个组。例如 $loc1 = 1234,1235,1236 我可以循环通过。

任何建议,将不胜感激!

4

3 回答 3

3

Group-Object不能很好地处理哈希表,因为键不是真正的属性。

假设:

$csv = Import-CSV C:\File.csv

你应该能够做到,例如:

$ids = $csv | %{ $_.id }

获取 ID 值的数组。您可能想要通过管道Get-Unique查找位置。

如果您想快速获取单个 ID 的位置:

$location = $csv | ?{ $_.id -eq 42 } | %{ $_.location }

如果您想快速获取单个位置的所有 ID 的数组(我认为这就是您想要的):

$loc1 = $csv | ?{ $_.location -eq 'loc1' }

作为参考,如果您想获得一个哈希表,将每个位置映射到一个 ID 数组:

$groups = $csv | %{ $_.location } | &{
    begin
    {
        $hash = @{}
    }
    process
    {
        $location = $_.location
        $hash[$location] = $csv | ?{ $_.location -eq $location }
    }
    end
    {
        $hash
    }
}
于 2013-07-20T04:17:23.577 回答
0

还有另一种选择:

(Import-Csv c:\foo.csv | Group Location -AsHashTable).Loc1 | Foreach {$_.id}

如果你在 V3 上,你可以这样做:

(Import-Csv c:\foo.csv | Group Location -AsHashTable).Loc1.Id
于 2013-07-20T04:53:20.037 回答
0

有点棘手,但这会做到:

Import-Csv C:\File.csv | Group-Object "location" | %{Set-Variable ($_.Name) ($_.Group | Select-Object -ExpandProperty id)}

运行之后,$loc1$loc2等将是每个位置的所有 id 的数组。

于 2013-07-20T04:47:53.203 回答