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
Vielleicht kann mir jemand helfen?
Danke vorab
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
$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
Please also mark the comments that contributed to the solution of the article
Content-Key: 6335480847
Url: https://administrator.de/contentid/6335480847
Printed on: June 16, 2024 at 19:06 o'clock
3 Comments
Latest comment
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.
Nach Bedarf anpassen und ein bisschen testen.
Gruß
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ß
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"