我有一个Powershell脚本可以运行,但它需要很长时间才能完成。我是Powershell新手,我找不到加速这个过程的解决方案。希望有人能告诉我正确的方向。
举例说明。我有两个csv文件。
CSV 1:
CI Name,Last Logon Account
Computer1, User1
Computer2, User2
Computer3, User3CSV 2:
Device Display Label,Subscriber Employee Id
Computer1, User1
Computer2, User2
Computer3, User6我希望将第一列中的所有配置项名称与第二列中的最后一个登录帐户相匹配,并将订阅者员工id与第一个文件中的配置项名称相匹配。
结果是:
Ci name, Last logon Account, Subscriber Employee Id
Computer1,User1,User1
Computer2,User2,User2
Computer3,User3,User6我在Powershell中有以下脚本:
$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行。所以完成这个脚本需要很长时间。有没有办法加速这个过程呢?我希望有人能给我指出正确的方向。
发布于 2021-03-31 19:05:45
使用哈希表从其中一个CSV文件构建索引-这样您就不需要嵌套循环,并且运行时会显著下降:
# 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
}
}https://stackoverflow.com/questions/66886344
复制相似问题