geretcondit
Goto Top

Power Shell Script Soll nach Suchbegriffen Zeilen aus einer Datei Filtern, aber mein Suchbegriff zeigt keine Wirkung

Hallo meine Lieben mit Administratoren,

ich bin dabei ein kleines Script zu schreiben das wen es fertig ist aus einer Trace Datei Zeilen mit einem Bestimmten Suchbegriff ausfiltert Speichert und später nochmal als Mail verschickt. Das einzige Problem das ich im Moment habe sind meine Suchbegriffe.

Set-StrictMode -Version "2.0"  
Clear-Host

$Sucher = @("ERR","WAR")  
$Path = "C:\Users\username\Desktop\Dateiname.trc"  
$OutPath="C:\Users\username\Desktop\"  

Foreach($Finder in $Sucher){
    $OutPath="C:\Users\username\Desktop\"  
    $OutPath = "$OutPath\$Finder.txt"  
    $PatternLines = Select-String -path $Path -pattern $Finder | ft LineNumber, Line -auto
    $PatternLines | Out-File -filepath $OutPath -encoding Default   
}

Das ist die Code Stelle die Mir Probleme Bereitet Nämlich um genau zu sein der Bereich:
$Sucher = @("ERR","WAR")  
Mit den Suchbegriffen bekomme ich Ergebnisse und alles Funktioniert mein Problem ist das die Eigentlichen Suchbegriffe so Aussehen Müssen damit alles funktioniert:
$Sucher = @("ERR(7)","WAR(4)")  
Wen ich das aber auf die Art Probiere bekomme ich gar keine Ergebnisse mehr und ohne die "(7) und (4)" dazu bekomme ich wesentlich zu viele und auch die Falschen Ergebnisse.

Muss ich die Parameter irgendwie anders Einlesen damit es Funktioniert oder mache ich hier einen Denkfehler?
(Meine Kollegen schlagen schon vor das ich mich damit direkt an Microsoft wenden soll was ich etwas Drastisch finde)

Ich hoffe jemand hat eine Idee.

Content-ID: 265221

Url: https://administrator.de/forum/power-shell-script-soll-nach-suchbegriffen-zeilen-aus-einer-datei-filtern-aber-mein-suchbegriff-zeigt-keine-265221.html

Ausgedruckt am: 26.12.2024 um 02:12 Uhr

114757
Lösung 114757 04.03.2015 aktualisiert um 16:15:15 Uhr
Goto Top
Moin,
die Suchbegriffe werden als Regular Expression Pattern (-pattern) interpretiert, deswegen erhältst du falsche Ergebnisse, denn die Klammern und auch noch diverse andere Sonderzeichen (^$?.*) etc. haben dort besondere Bedeutungen !
Du kannst diese Sonderzeichen aber mit einer Funktion Escapen lassen:
$finder = [regex]::Escape($finder)
dann klappts auch mit dem Nachbarn face-wink

Gruß jodel32
GeretCondit
GeretCondit 04.03.2015 aktualisiert um 16:10:06 Uhr
Goto Top
Ich habs mal schnell Ausprobiert meine Suchergebnisse Bleiben aber immer noch leer.

//Wo soll ich es einbauen? Habs schnell mal Vor deklairiert und auch in der Schleife Probiert.
114757
Lösung 114757 04.03.2015 aktualisiert um 16:29:01 Uhr
Goto Top
Zitat von @GeretCondit:

Ich habs mal schnell Ausprobiert meine Suchergebnisse Bleiben aber immer noch leer.
wohl zu schnell probiert face-wink !
//Wo soll ich es einbauen? Habs schnell mal Vor deklairiert und auch in der Schleife Probiert.
Clear-Host

$Sucher = @("ERR(7)","WAR(4)")  
$Path = "C:\Users\username\Desktop\Dateiname.trc"  
$OutPath="C:\Users\username\Desktop\"  

Foreach($finder in $Sucher){
    $OutPath="C:\Users\username\Desktop\"  
    $OutPath = "$OutPath\$finder.txt"  
    $finder = [regex]::Escape($finder)
    $PatternLines = Select-String -path $Path -pattern $finder | ft LineNumber, Line -Auto
    $PatternLines | Out-File -filepath $OutPath -encoding Default   
}
GeretCondit
GeretCondit 04.03.2015 um 16:28:56 Uhr
Goto Top
Ok stimmt hätte ich auch gleich drauf kommen können das ich das Direkt vor die $PatternLines Setzten muss. ^^"

Vielen Dank auf jeden fall läufts jetzt Perfekt und meine Mail funktion auch endlich was zum senden face-smile

Danke dir jodel32

Mit Freundlichen Grüßen
GeretCondit
colinardo
colinardo 04.03.2015 aktualisiert um 17:20:45 Uhr
Goto Top
Hallo GeretCondit,
was mit noch auffällt ist folgendes Problem bei deinem Code:
$OutPath = "$OutPath\$Finder.txt"
Hier setzt du den Dateinamen gleich dem Suchwort. Was aber wenn du z.B. Sonderzeichen wie \\/:?<>|"* im Suchwort benutzt ? Dann wird deine Ausgabe fehlschlagen weil diese Zeichen in einem Dateinamen nicht vorkommen dürfen!
Also besser diese Sonderzeichen vorher noch ersetzen:
$OutPath = "$OutPath\$($finder -replace '^com[1-9]|^lpt[1-9]|^con|^nul|^prn|[\\/:?<>|"*]','_').txt"

Und das erneute deklarieren von $OutPath="C:\Users\username\Desktop\" in der Schleife ist auch nicht besonders schön. Deklariere die Variable außerhalb der Schleife und benutze innerhalb der Schleife eine andere Variable für den kompletten Dateipfad. Dann musst du $outPath nicht jedes mal in Zeile 8 neu setzen.

Grüße Uwe
GeretCondit
GeretCondit 04.03.2015 um 17:13:11 Uhr
Goto Top
Hmmm an die Sonderzeichen in der Ausgabe im Datei Namen habe ich nicht gedacht da das bei dieserm Script nicht vorkommt aber ich werde mir das auf jeden fall für die zukunft notieren.

Stimmt die Doppel Deklaration ist auch nicht wirklich schön oder sinnvol das ändere ich noch.

Vielen Dank