Verwenden des Cmdlet \"Sort-Object\"
Sortieren von zurückgegebenen Daten
Wenn Sie Skriptautor sind, haben Sie sicherlich schon mal darüber phantasiert, Daten so zu sortieren, wie Sie es möchten. Wer sagt, das Träume nicht wahr werden können? Mit Windows PowerShell ist es erstaunlich einfach, Daten zu sortieren, und zwar so, wie Sie es gerne wünschen.
Beispiel: Das Cmdlet Get-EventLog gibt Daten zurück, die nach dem Zeitpunkt sortiert wurden, zu dem ein Ereignis in das Ereignisprotokoll geschrieben wurde. Aber was ist, wenn Sie diese Daten gern nach der Ereigniskennung sortiert haben möchten? Was dann?
Tja, was dann... Um nach der Ereigniskennung zu sortieren, rufen Sie die entsprechenden Daten ab und übergeben diese an das Cmdlet Sort-Object. Legen Sie dann fest, nach welcher Eigenschaft Sort-Object sortieren soll:
Get-EventLog system -newest 5 | Sort-Object eventid
Führen Sie diesen Befehl aus, und Sie erhalten in etwa folgende Daten:
Index Time Type Source EventID Message
----- ---- ---- ------ ------- -------
6194 May 16 12:41 Info W32Time 35 The time service is n...
6193 May 16 12:41 Erro Dhcp 1000 Your computer has los...
6197 May 16 14:47 Warn Dhcp 1003 Your computer was not...
6196 May 16 14:13 Warn Dhcp 1003 Your computer was not...
6195 May 16 12:42 Warn Dhcp 1007 Your computer has aut...
Nicht schlecht, was? Möchten Sie die Ereignisse lieber in absteigender Reihenfolge sortiert haben, also mit der größten ID zuerst? Das ist ganz einfach. Fügen Sie dazu nur den Parameter –descending hinzu:
Get-EventLog system -newest 5 | Sort-Object eventid -descending
Beachten Sie die Änderungen:
Index Time Type Source EventID Message
----- ---- ---- ------ ------- -------
6195 May 16 12:42 Warn Dhcp 1007 Your computer has aut...
6197 May 16 14:47 Warn Dhcp 1003 Your computer was not...
6196 May 16 14:13 Warn Dhcp 1003 Your computer was not...
6193 May 16 12:41 Erro Dhcp 1000 Your computer has los...
6194 May 16 12:41 Info W32Time 35 The time service is n...
Mit Windows PowerShell können Sie auch mehrere Eigenschaften sortieren: Verwenden Sie einfach Kommas, um die Eigenschaften voneinander zu trennen. Nehmen wir beispielsweise an, Sie rufen eine Liste aller Dateien im Ordner "C:\Scripts" auf. Sie möchten diese Daten nun zuerst nach der Dateierweiterung und dann nach der Dateigröße sortieren. Mit anderen Worten, Sie möchten alle TXT-Dateien zusammen gruppieren und dann diese Gruppierung nach der Dateigröße sortieren. Hier ist der Befehl dazu (mithilfe des Cmdlet Get-ChildItem):
Get-ChildItem c:\scripts | Sort-Object extension,length
Sie erhalten eine Ausgabe wie die folgende. Beachten Sie dabei, dass alle VBS-Dateien nicht nur zusammen aufgelistet, sondern auch nach Dateigröße angeordnet sind. Die kleinste VBS-Datei ist zuerst aufgelistet, die größte zuletzt:
-a--- 5/5/2006 9:09 PM 53358 tee.txt
-a--- 5/15/2006 8:57 AM 377 new_excel.vbs
-a--- 3/15/2006 10:23 AM 399 imapi.vbs
-a--- 3/3/2006 2:46 PM 537 methods.vbs
-a--- 3/3/2006 2:55 PM 698 read-write.vbs
-a--- 3/11/2006 10:10 PM 978 imapi2.vbs
-a--- 3/17/2006 8:21 AM 1105 winsat.vbs
-a--- 5/5/2006 2:55 PM 19225 test.vbs
-a--- 4/4/2006 8:30 AM 2616487 HoneyPie.wma
Aliase für "Sort-Object"
- sort