我需要优化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是否与第二个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
)非常慢。
对于如何优化脚本的任何想法,我将不胜感激。
答案 0 :(得分:0)
也许这样可以工作:
$results | ForEach-Object {
New-Object -Type PSObject -Property $_
} | Group-Object GUID | ForEach-Object {
$teacher = $_.Group
$teacher | Select-Object -First 1 -Exclude Klasse -Property *, @{n='Klasse';e={
$teacher | Select-Object -Expand Klasse
}}
}
将哈希表转换为自定义对象,按GUID将其分组,然后用新的哈希表替换原始的“ Klasse”属性,其中包含该组中所有对象的值数组,然后选择第一个结果。
应该{{1}}已经是对象列表,您可以跳过第一个$results
:
ForEach-Object