Performace Ich habe zwei Listen in Powershell mit einer großen Menge von Daten:
Powershell Merge 2 Listen
- $ Byods MACs und Benutzernamen enthält, mit etwa 5000 Artikel
- $ DHCPLeases MACs und IPs mit etwa 3000 enthält, Artikel
ich möchte eine neue Liste mit Benutzernamen und IP-Adressen erstellen, in dem die Byods Liste führt, und die IP-Adressen werden von den DHCPleases, nur containg Datensätze gefunden, die eine Übereinstimmung gefunden (a LEFT JOIN?)
Ich habe eine foreach-Schleife erstellt, die den Job erledigt. Es dauert jedoch sehr viel Zeit (> 30 min).
Ich bin mir sicher, dass dies schneller sein kann. Jemand?
$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
}
}
Um zu beginnen: ersetzen Sie das $ userbyods + = mit etwas wie einem list.add() (zuerst erstellen Sie eine neue Liste). Mit + = wird bei jeder Iteration eine Kopie des Arrays erstellt. Zweitens: Sie können Schritte mit einer Stoppuhr durchführen, um die Leistung zu überprüfen und um zu sehen, welche Schritte eine "lange" Zeit benötigen. – bluuf