power-shell从数组中检索行

时间:2016-05-16 15:49:17

标签: arrays csv powershell

所以如果我从CSV文件创建一个数组

name,age,height,fruit
Jon,34,5,orange
Jane,23,4,apple
Dave,27,6,pear

我可以在使用

中阅读
$list = Import-CSV .....

但现在我有了问题。 "告诉我Jane"

所以我可以说

foreach ($val in $list)
{
    if ($val.name = "jane" ) {$currentuser = $val}
}

write-host $currentuser.name
write-host $currentuser.age
write-host $currentuser.hight
write-host $currentuser.fruit

有没有更好的方法来做到这一点而不是单步执行?在我的实际情况中,我有一个来自HR的工作人员列表和一个独立的Active Directory目录。 我想逐步浏览HR列表以在AD中查找用户,将此用户设置为变量/对象。然后使用来自HR的信息更新用户。

上述方法可行,但似乎非常低效,无法通过两个数千个用户的列表。

鉴于从CSV创建的数组,我想要一种方法,通过输入字符串" jane"它会将jane的信息返回给我可以使用的对象。

1 个答案:

答案 0 :(得分:1)

如果你有两个列表,两个列表都有两个可以关联的不同键,最好的方法是在查找表中存储一个列表(任何类型的字典都可以,包括PowerShell中的哈希表),然后循环遍历另一个列表:

$HRList = @'
Name,Position,Department
John,Manager,Sales
Bob,Worker,Production
Sally,Accountant,Finance
'@ |ConvertFrom-Csv

$ADList = @'
Name,Username
Sally,sallysalt
Bob,bobburrows
John,johnjames
'@ |ConvertFrom-Csv

# Convert the AD list to a hash table
$ADLookupTable = @{}
foreach($ADUser in $ADList)
{
    $ADLookupTable[$ADUser.Name] = $ADUser
}

# Go through HR list
foreach($HRUser in $HRList)
{
    # Now you can find the relevant object in the other list
    $ADUser = $ADLookupTable[$HRUser.Name]
    Set-ADUser -Identity $ADUser.Username -Title $ADUser.Position -Department $ADUser.Department
}