Мне нужна помощь в оптимизации моего скрипта PowerShell.
$sorted = @()
$firsttime = 0
$j = 0
$zaehler = $results.Count-1
for ($i=0; $i -le $results.Count-1; $i++) {
$j = $i+1
while ($results.GUID[$i] -eq $results.GUID[$j]) {
$klassen = ""
$rec = $results | where {$_.GUID -eq $results.GUID[$i]}
if ($firsttime -eq 0 -or !$sorted.GUID.contains($rec[0].GUID)) {
$firsttime = 1
foreach ($item in $rec.Klasse) {
if ($klassen -eq "") {
$klassen += $item
} else {
if (!$klassen.Contains($item)) {
$klassen += "," + $item
}
}
}
$rec[0].Klasse = $klassen
$sorted += $rec[0]
}
$j = $j+1
}
Write-Host ($i/$zaehler).ToString("P") "von Schule" $schule
}
if (!$sorted) {
$results
} else {
$sorted
}
В основном в моем наборе результатов ($results
) у меня есть дубликаты строк учителей, и единственное отличие - это класс ("Klasse / Klassen"), ониучат в.Чтобы минимизировать вывод, я проверяю, совпадает ли первый GUID со вторым, а затем сценарий добавляет второй класс к первому.Таким образом, массив $sorted
имеет только одну строку на учителя с разделенной запятыми строкой, которая показывает все классы.
Пример строки $results
:
@{
GUID={1234567-1234-1234-1234-1234567};
userrole=teacher;
Vorname=Max;
Nachname=Mustermann;
Geburtstag=01.01.2000;
Klasse=9A;
Schule=123456
}
@{
GUID={1234567-1234-1234-1234-1234567};
userrole=teacher;
Vorname=Max;
Nachname=Mustermann;
Geburtstag=01.01.2000;
Klasse=9B;
Schule=123456
}
Пример строки $sorted[0]
:
@{
GUID={1234567-1234-1234-1234-1234567};
userrole=teacher;
Vorname=Max;
Nachname=Mustermann;
Geburtstag=01.01.2000;
Klasse=9A,9B,9C,5A;
Schule=123456
}
Процесс сортировки (проверьте, содержит ли, foreach $item
, добавьте к $klassen
) довольно медленный.
Я был бы очень признателен за любые идеикак оптимизировать скрипт.