我有如下的CSV:
location,id
loc1,1234
loc1,1235
loc1,1236
运行$ a = Import-CSV C:\ File.csv | Group-Object“location”我得到以下输出:
Count Name Group
----- ---- -----
3 loc1 {@{location=loc1; id=1234}, @{location=loc1; id=1235), @{location=loc1, id=1236}}
我想将所有ID添加到一个组(使用Add-QADGroupMember),但我无法弄清楚如何为$ loc1获取一组ID。它似乎是正确地对它们进行分组,但我似乎无法将输出解析为单个组。 E.g $ loc1 = 1234,1235,1236,我可以循环。
任何建议都将不胜感激!
答案 0 :(得分: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
}
}
答案 1 :(得分:0)
有点棘手,但是会这样做:
Import-Csv C:\File.csv | Group-Object "location" | %{Set-Variable ($_.Name) ($_.Group | Select-Object -ExpandProperty id)}
运行之后, $ loc1 , $ loc2 等将是每个位置的所有ID的数组。
答案 2 :(得分:0)
还有另一种选择:
(Import-Csv c:\foo.csv | Group Location -AsHashTable).Loc1 | Foreach {$_.id}
如果你在V3上,你可以这样做:
(Import-Csv c:\foo.csv | Group Location -AsHashTable).Loc1.Id