(9)
Artikel
bewerten
(84% positiv)
(47)

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 500KB

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

 

letzte Änderung dieses Artikels: 18.10.2016 17:44




Kommentare