我正在从一个API检索两个CSV,一个叫做students.csv
,类似于:
StudentNo,PreferredFirstnames,PreferredSurname,UPN
111, john, smith, john@email.com
222, jane, doe, jane@email.com
一个叫rooms.csv
的人:
roomName, roomNo, students
room1, 1, {@{StudentNo=111; StudentName=john smith; StartDate=2018-01-01T00:00:00; EndDate=2018-07-06T00:00:00},....
room2, 2,{@{StudentNo=222; StudentName=jane doe; StartDate=2018-01-01T00:00:00; EndDate=2018-07-06T00:00:00},...
rooms.csv中的第三列是API提供的数组
将两者合并为
的最佳方法是什么StudentNo,PreferredFirstnames,PreferredSurname,UPN, roomName
111, john, smith, john@email.com, room1
222, jane, doe, jane@email.com, room2
我在想类似...
$rooms = Import-Csv rooms.csv
$students = Import-Csv students.csv
$combined = $students | select-object StudentNo,PreferredSurname,PreferredFirstnames,UPN,
@{Name="roomName";Expression={ ForEach ($r in $rooms) {
if ($r.Students.StudentNo.Contains($_.StudentNo) -eq "True")
{return $r.roomName}}}}
这可行,但是foreach
是正确的选择吗?我是将事情混在一起还是有更有效的方法?
---原始帖子---
利用所有这些信息,我需要比较学生数据并更新AzureAD,然后编译包括first name
,last name
,upn
,room
和从AzureAD检索的其他文件。
我的问题是“效率”。我的代码大部分都能正常运行,但是需要几个小时才能运行。目前,我正在遍历students.csv
,然后为每个学生遍历rooms.csv
找到他们所在的房间,显然在所有这些之间等待多个api调用。
为每个学生找到房间的最有效方法是什么?将CSV作为自定义PSObject
导入与使用哈希表具有可比性吗?