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 :)