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

 

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

DANKE für deine Bewertung!

Fragen / Kommentare


(sortiert nach Bewertung / Datum) [alle Kommentare(neueste zuerst)]

✍anonym
03.12.2015 16:08
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?
✍anonym
gepostet am 23.03.2022 16:50
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

✍anonym
12.11.2018 09:30
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
gepostet am 12.11.2018 09:30
danke, habe ich ausgebessert

Beitrag erstellt von Bernhard

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