给出以下csv文件,如何正确遍历它?我需要某种哈希表吗?
csv文件:
AD/Profile Name,Org Level,Org Member
AD_Group1,Region,"China
USA"
AD_Group2,Sub Region,"China
Corp"
AD_Group3,Sub Region,USA
代码:
$clmns = Import-Csv .\File1.csv
foreach ($ADGroup in $clmns.'AD/Profile Name') {
$ADGroup
foreach ($orglvl in $ADGroup.'Org Level') {
$orglvl
foreach ($orgmember in $orglvl.'Org Member') {
$orgmember
}
}
}
$orglvl
和$orgmember
不在运行此程序时打印出任何内容
预期结果:
AD_Group1
Region
China
USA
AD_Group2
Sub Region
China
Corp
AD_Group3
Sub Region
USA
答案 0 :(得分:2)
怎么样?
$clmns = Import-Csv "G:\BEKDocs\Scripts\Test\File1.csv"
$clmns |
ForEach-Object {
$orglvl = $_.'Org Level'
$Members = ($_.'Org Member').split("`r`n")
"$($_.'AD/Profile Name')"
For ($Cntr=0; $cntr -lt $Members.count; $Cntr+=2) {
"Member: $($Members[$($Cntr)]) `tLevel: $orglvl"
}
}
输出:
AD_Group1
Member: China Level: Region
Member: USA Level: Region
AD_Group2
Member: China Level: Sub Region
Member: Corp Level: Sub Region
AD_Group3
Member: USA Level: Sub Region
HTH
答案 1 :(得分:1)
那呢?
foreach ($ADGroup in $clmns.'AD/Profile Name') {
$tmp = $clmns | Where-Object {$_.'AD/Profile Name' -eq $ADGroup}
foreach ($orglvl in $tmp.'Org Level') {
$orglvl
$tmp2 = $tmp | Where-Object {$_.'Org Level' -eq $orglvl}
foreach ($orgmember in $tmp2.'Org Member') {
$orgmember
}
}
}
可能还有一些问题,但是我想你明白了
答案 2 :(得分:1)
Group-Object应该能够处理此任务:
$clmns = Import-Csv .\File1.csv
$clmns | Group-Object -Property 'Org Level' | Foreach-Object {
$_.Name
$_.Group.'Org Member'
}
Name
属性将是经过迭代的Org Level
值。通过Group
属性可以访问已分组的对象。
编辑1:
根据更新后的帖子,您只需要一个循环即可列出所有值:
$clmns = Import-Csv .\File1.csv
foreach ($row in $clmns) {
$row.'ad/profile name'
$row.'org level'
$row.'org member'
}
编辑2:
我从powershell.org网站阅读了您的帖子。您可以执行以下操作来完成任务。我假设$table
已经包含自定义对象的数组。
$clmns = Import-Csv .\File1.csv
foreach ($row in $clmns) {
$ADGroup = $row.'AD/Profile Name'
$OrgLevel = $row.'Org Level'
$data = $table | Where {$_.$OrgLevel -in ($row.'Org Member' -split '\r?\n') }
[pscustomobject]@{'AD Group' = $ADGroup; 'Org Codes' = "{0}|" -f ($data.'Org Code' -join '|')}
}