所以如果我从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的信息返回给我可以使用的对象。
答案 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
}