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:
                 OriginalFilename:
                 FileVersion:
                 FileDescription:
                 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

 

positive Bewertung({{pro_count}})
Beitrag bewerten:
{{percentage}} % positiv
negative Bewertung({{con_count}})

DANKE für deine Bewertung!


veröffentlicht am 19.03.2013 von Bernhard
geändert am 14.11.2018 von Bernhard



Kommentare


(sortiert nach Bewertung / Datum) [alle Kommentare(neueste zuerst)]
✍anonym
erstellt am 12.11.2018 10:11
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
✍Bernhard
erstellt am 12.11.2018 10:11
danke, habe ich ausgebessert

erstellt von Bernhard

✍anonym
erstellt am 04.12.2015 17:12
User: hey antwort 
jap das ist im bereich power shell etwas fortgeschritten daher solltest du dir im internet eine einführen ansehen zb. youtube :)

✍anonym
erstellt am 03.12.2015 17:12
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?

Diese Website verwendet  Cookies. Mehr Details