在Powershell中有效处理多个CSV

时间:2018-09-12 01:19:31

标签: powershell csv import-csv export-csv

我正在从一个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 namelast nameupnroom和从AzureAD检索的其他文件。

我的问题是“效率”。我的代码大部分都能正常运行,但是需要几个小时才能运行。目前,我正在遍历students.csv,然后为每个学生遍历rooms.csv找到他们所在的房间,显然在所有这些之间等待多个api调用。

为每个学生找到房间的最有效方法是什么?将CSV作为自定义PSObject导入与使用哈希表具有可比性吗?

0 个答案:

没有答案