PowerShell Syntax: vergleichen und verschachteln
PowerShell verwendet für das Vergleichen von Werten sogenannte Vergleichsoperatoren. Mittels Pipes können verschiedene PowerShell-Befehle an weitere Befehle übergeben werden.
vergleichen
Um bestimmte Werte zu vergleichen gibt es die folgenden Vergleichsoperatoren
Beispiele dafür sind:
-eq
gleich
-ne
ungleich
-gt
größer als
-ge
größer oder gleich
-lt
kleiner als
-le
kleiner oder gleich
...
wir verwenden "-gt
" (größer als) in unserem nächsten Beispiel:
Pipes (Umleitung)
Mittels Pipe Symbol "|
" können mehrere Befehle verschachtelt oder umgeleitet werden:
vergleichen am Beispiel dir, (Get-ChildItem)
Get-ChildItem c:\testordner | where-Object {$_.Length -gt 50KB}
zeigt Files (dir) im Ordner c:\testordner größer als 50KB
wir erhalten folgende Ausgabe:
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 19.03.2013 18:32 381816 PsExec.exe
-a--- 19.03.2013 18:32 105264 psfile.exe
-a--- 19.03.2013 18:32 333176 PsGetsid.exe
-a--- 19.03.2013 18:32 390520 PsInfo.exe
-a--- 19.03.2013 18:32 468592 pskill.exe
-a--- 19.03.2013 18:32 232232 pslist.exe
-a--- 19.03.2013 18:32 183160 PsLoggedon.ex
-a--- 19.03.2013 18:32 178040 psloglist.exe
-a--- 19.03.2013 18:32 171608 pspasswd.exe
-a--- 19.03.2013 18:32 167048 psping.exe
-a--- 19.03.2013 18:32 169848 PsService.exe
-a--- 19.03.2013 18:32 207664 psshutdown.ex
-a--- 19.03.2013 18:32 187184 pssuspend.exe
-a--- 19.03.2013 18:32 66582 Pstools.chm
Sortieren
Wollen wir die Liste der Größe nach sortieren, brauchen wir noch eine Pipe
Get-ChildItem c:\testordner | where-Object {$_.Length -gt 50KB} | Sort-Object Length
Die Ausgabe sieht dann so aus:
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 19.03.2013 18:32 66582 Pstools.chm
-a--- 19.03.2013 18:32 105264 psfile.exe
-a--- 19.03.2013 18:32 167048 psping.exe
-a--- 19.03.2013 18:32 169848 PsService.exe
-a--- 19.03.2013 18:32 171608 pspasswd.exe
-a--- 19.03.2013 18:32 178040 psloglist.exe
-a--- 19.03.2013 18:32 183160 PsLoggedon.exe
-a--- 19.03.2013 18:32 187184 pssuspend.exe
-a--- 19.03.2013 18:32 207664 psshutdown.exe
-a--- 19.03.2013 18:32 232232 pslist.exe
-a--- 19.03.2013 18:32 333176 PsGetsid.exe
-a--- 19.03.2013 18:32 381816 PsExec.exe
-a--- 19.03.2013 18:32 390520 PsInfo.exe
-a--- 19.03.2013 18:32 468592 pskill.exe
Damit die Sortierung den Datentyp richtig erkennt, kann etwas nachgeholfen werden:
Sollten alle Dateinamen aus Nummern bestehen, würde Sort-Object
die Namen alphabetisch sortieren: 1000 wäre als Beispiel dann kleiner als 50.
Abhilfe schafft das Zuweisen des Datentyps: Sort-Object { $_.Name.replace("stringpart","") -as [int] }
Datentypen, siehe: PowerShell Variablen, Datentypen und Objekte
Ausgabe
Die Formatierung der Ausgabe kann mit einer weiteren Pipe angepasst werden, um also anstelle der Tabellenansicht eine Liste zu bekommen kann der Befehl: Format-List verwendet werden:
Get-ChildItem c:\testordner | where-Object {$_.Length -gt 50KB} | Sort-Object Length | Format-List
Verzeichnis: C:\testordner
Name : Pstools.chm
Length : 66582
CreationTime : 20.02.2013 17:22:50
LastWriteTime : 19.03.2013 18:32:56
LastAccessTime : 20.02.2013 17:22:50
VersionInfo :
File: C:\testordner\Pstools.chm
InternalName: Original
Filename: File
Version: File
Description:
Product:
ProductVersion:
Debug: False
Patched: False
PreRelease: False
PrivateBuild: False
SpecialBuild: False
Language:
Name : psfile.exe
Length : 105264
CreationTime : 20.02.2013 17:22:50
LastWriteTime : 19.03.2013 18:32:54
LastAccessTime : 20.02.2013 17:22:50
VersionInfo :
File: C:\testordner\psfile.exe
InternalName: psfile
OriginalFilename: psfile.exe
FileVersion: 1.02
FileDescription: psfile
Product: Sysinternals PsFile
ProductVersion: 1.02
Debug: False
Patched: False
PreRelease: False
PrivateBuild: False
SpecialBuild: False
Language: Englisch (Vereinigte Staaten).........
Beispiel Eventlog auslesen:
Beispielsweise kann auf einem Remote Computer das Eventlog ausgelesen werden, mittels Pipe | kann darin gesucht werden und mit einem weiteren Pipe | kann das Ergebniss in eine csv Datei exportiert werden:
get-winevent -computername RemoteSystem -Logname System | where {$_.Message | findstr "zu suchen"} | Export-Csv c:\temp\sucheimEventlog.csv
{{percentage}} % positiv
DANKE für deine Bewertung!
Fragen / Kommentare
(sortiert nach Bewertung / Datum) [alle Kommentare(neueste zuerst)]
User: Naja Ich finde gut was Sie machen, aber es ist so komplett ohne Erklärung. Ich als Neuling verstehe Null warum hier was, wo und wie passiert. Oder ist das hier nur für Leute die bereits Erfahrung mit der Shell hatten?
IT bedeutet: du musst selbstständig lernen. Hier gibt es super-Tips, ist aber kein "how to complete" auf youtube gibt's tolle tutorials.
Beitrag erstellt von anonym
User: Tippfehler falls ich das richtig erkenne: Get-ChildItem c:\testordner | where-Object {$_.Length -gt 50KB} zeigt Files (dir) im Ordner c:\testordner größer als 500KB
danke, habe ich ausgebessert
Beitrag erstellt von Bernhard
User: hey antwort jap das ist im bereich power shell etwas fortgeschritten daher solltest du dir im internet eine einführen ansehen zb. youtube :)