【发布时间】:2017-09-07 08:50:33
【问题描述】:
我在 Powershell 中有两个包含大量数据的列表:
- $Byods 包含大约 5000 个项目的 MAC 和用户名
- $DHCPLeases 包含大约 3000 项的 MAC 和 IP
我想创建一个新列表,其中包含 Byods 列表前导的用户名和 IP,并且 IP 是从 DHCPleases 中找到的,仅包含找到匹配项的记录(左连接?)
我创建了一个 foreach 循环来完成这项工作。但是,它需要大量时间才能完成(> 30 分钟)。
我相信这会更快。有人吗?
$UserByods = @()
foreach ($lease in $DHCPLeases)
{
$MAC = [string]$lease.MAC
$UserByod = @()
$UserByod = $Byods | where {$_.MAC -eq $MAC}
if (($UserByod | measure).count -eq 1) {
$ByodIP = New-Object -TypeName PSObject
$ByodIP | Add-Member -Name 'User' -MemberType Noteproperty -Value $UserByod.Username
$ByodIP | Add-Member -Name 'IP' -MemberType Noteproperty -Value $lease.IP
$UserByods += $ByodIP
}
}
【问题讨论】:
-
开始:将 $userbyods += 替换为 list.add() 之类的东西(首先创建一个新列表)。使用 += 在每次迭代时复制数组。第二:您可以在步骤之间用秒表检查性能并查看哪些步骤需要“长时间”运行。
标签: performance list powershell join