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.
Das ist die Code Stelle die Mir Probleme Bereitet Nämlich um genau zu sein der Bereich:
Mit den Suchbegriffen bekomme ich Ergebnisse und alles Funktioniert mein Problem ist das die Eigentlichen Suchbegriffe so Aussehen Müssen damit alles funktioniert:
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.
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")
$Sucher = @("ERR(7)","WAR(4)")
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.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 265221
Url: https://administrator.de/contentid/265221
Ausgedruckt am: 24.11.2024 um 06:11 Uhr
6 Kommentare
Neuester Kommentar
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:
dann klappts auch mit dem Nachbarn
Gruß jodel32
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)
Gruß jodel32
Zitat von @GeretCondit:
Ich habs mal schnell Ausprobiert meine Suchergebnisse Bleiben aber immer noch leer.
wohl zu schnell probiert !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.
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
}
Hallo GeretCondit,
was mit noch auffällt ist folgendes Problem bei deinem Code:
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:
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
was mit noch auffällt ist folgendes Problem bei deinem Code:
$OutPath = "$OutPath\$Finder.txt"
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