gipsnacken
Goto Top

Wort in Text-Datei finden und Zeile in anderer Datei Speichern

Hallo zusammen,

ich bin neu hier und und noch kein wirklicher PowerShell Profi. Daher benötige ich etwas Hilfe bei einem kleinen Script:

Ich möchte das Word" failed" oder "error" in der zuletzt erstellten Datei mit Endung *.log eines bestimmten Ordners finden und alle die gefundenen Zeilen komplett als Line in eine neue Text Datei speichern.

Aktuell habe ich das hier, aber wirft mir noch zu viele Fehler aus face-sad

$filenames = Get-ChildItem -Path C:\LOG\ | Where-Object {$_.LastWriteTime -gt (Get-Date).date} {$_.Extension -eq '.log'}  
$destination = "C:\Test\done.txt"  


$hits = select-string -Path C:\Log\ $filenames -SimpleMatch 'failed','error'  
$filecontents = get-content $filenames

foreach($hit in $hits)
{
    $filecontents[$hit.linenumber-1]| out-file -append $destination
    "" |out-file -append $destination  
}

Vielleicht kann mir jemand helfen?

Danke vorab

Content-Key: 6335480847

Url: https://administrator.de/contentid/6335480847

Printed on: June 16, 2024 at 19:06 o'clock

Member: michi1983
Solution michi1983 Mar 12, 2023 updated at 17:53:26 (UTC)
Goto Top
Hallo,

ich bin ja sonst kein Fan von ChatGPT aber gerade für solche Schnipsel nutze ich das Tool selber gerne.

Ich weiß aktuell zu wenig über Powershell um sowas selbst zu schreiben aber weiß den Output zu interpretieren.

# Den Pfad zum Ordner, in dem nach der zuletzt erstellten *.log-Datei gesucht wird, setzen
$LogFolderPath = "C:\Pfad\Zum\Ordner"  

# Die neueste *.log-Datei im Ordner finden
$NewestLogFile = Get-ChildItem -Path $LogFolderPath -Filter *.log | Sort-Object LastWriteTime -Descending | Select-Object -First 1

# Wenn eine *.log-Datei gefunden wurde
if ($NewestLogFile) {
    # Den Inhalt der Datei laden
    $LogFileContent = Get-Content -Path $NewestLogFile.FullName

    # Die Zeilen mit "failed" oder "error" filtern 
    $FailedOrErrorLines = $LogFileContent | Where-Object { $_ -match "failed|error" }  

    # Wenn mindestens eine entsprechende Zeile gefunden wurde
    if ($FailedOrErrorLines) {
        # Eine neue Textdatei im Ordner erstellen, um die gefundenen Zeilen zu speichern
        $OutputFilePath = Join-Path -Path $LogFolderPath -ChildPath "FailedOrErrorLines.txt"  
        New-Item -ItemType File -Path $OutputFilePath -Force | Out-Null

        # Die gefundenen Zeilen in die Ausgabedatei schreiben
        $FailedOrErrorLines | Out-File -FilePath $OutputFilePath -Encoding utf8
    }
}

Nach Bedarf anpassen und ein bisschen testen.

Gruß
Mitglied: 6247018886
Solution 6247018886 Mar 12, 2023 updated at 18:01:02 (UTC)
Goto Top
Get-ChildItem -Path "C:\LOG" -File -Filter *.log | sort LastWriteTime -Desc | select -First 1 |  select-string -Pattern 'error','failed' -SimpleMatch | select -Expand Line | set-content "C:\Test\done.txt"  
Cheers briggs
Member: Gipsnacken
Gipsnacken Mar 13, 2023 at 10:37:31 (UTC)
Goto Top
Super, vielen Dank euch !!