首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >加速CSV Powershell脚本

问加速CSV Powershell脚本
EN

Stack Overflow用户
提问于 2021-03-31 18:50:49
回答 1查看 56关注 0票数 2

我有一个Powershell脚本可以运行,但它需要很长时间才能完成。我是Powershell新手,我找不到加速这个过程的解决方案。希望有人能告诉我正确的方向。

举例说明。我有两个csv文件。

CSV 1:

代码语言:javascript
复制
CI Name,Last Logon Account
Computer1, User1
Computer2, User2
Computer3, User3

CSV 2:

代码语言:javascript
复制
Device Display Label,Subscriber Employee Id
Computer1, User1
Computer2, User2
Computer3, User6

我希望将第一列中的所有配置项名称与第二列中的最后一个登录帐户相匹配,并将订阅者员工id与第一个文件中的配置项名称相匹配。

结果是:

代码语言:javascript
复制
Ci name, Last logon Account, Subscriber Employee Id
Computer1,User1,User1
Computer2,User2,User2
Computer3,User3,User6

我在Powershell中有以下脚本:

代码语言:javascript
复制
$Data = Import-csv 'C:\Temp\Excel\CSV\file1.csv'   
$Data2 = Import-Csv 'C:\Temp\Excel\CSV\file2.csv' 
$combine = @() 

foreach ($first in $Data) {
  foreach ($second in $Data2) {
    if ($second.'Device Display Label' -eq $first.'CI Name') {
        $match = New-Object PSObject
        $match | Add-Member Noteproperty "Ci Name" $first.'CI Name'
        $match | Add-Member Noteproperty "Last Logon Account" $first.'Last Logon Account'
        $match | Add-Member Noteproperty "Subscriber Employee Id" $second.'Subscriber Employee Id'
        $combine += $match
    }
  }
}
$Combine

它起作用了,并给出了预期的结果。

唯一的问题是两个csv文件都有15000行。所以完成这个脚本需要很长时间。有没有办法加速这个过程呢?我希望有人能给我指出正确的方向。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-31 19:05:45

使用哈希表从其中一个CSV文件构建索引-这样您就不需要嵌套循环,并且运行时会显著下降:

代码语言:javascript
复制
# Build index/reference table from first data set
$DataTable = @{}
Import-csv 'C:\Temp\Excel\CSV\file1.csv' |ForEach-Object {
  $DataTable[$_.'CI Name'] = $_
}

# No need to store the second data set in an intermediate variable
$combine = Import-Csv 'C:\Temp\Excel\CSV\file2.csv' |ForEach-Object {
  if($DataTable.ContainsKey($_.'Device Display Label')){
    # Take the existing object from the first data set 
    # and add the subscriber from the second data set
    $DataTable[$_.'Device Display Label'] |Add-Member NoteProperty "Subscriber Employee Id" $_.'Subscriber Employee Id' -PassThru
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66886344

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档