I currently have an output log file that's a bit of a mess and grows quickly. It's the debug output for a large script that permissions mailboxes. I basically just want to delete every line in the file until it finds the first iteration of the date 7days ago.
So far, I can return all lines containing that date
$content = Get-Content $file
$lastweek = "{0:M/d/yyyy}" -f (get-date).AddDays(-7)
$content | Where-Object { $_.Contains("$lastweek") }
But I can not figure out a function to just wipe everything until that is found for the first time.
I have tried a -replace:
$content -replace ".*$lastweek", " " | Set-Content $file -Force
But that only seems to replace from the beginning of each line that contains the specified string.
If you're running V4, you can use the array .Where() method, with the 'SkipUntil' option:
$content.Where({ $_ -like "*$lastweek*" },'SkipUntil')
If you want to only keep the entries containing your specified search string from that log file, you can do something to the effect of:
$content = Get-Content $file | Where-Object {$_ -notcontains "$lastweek"}
$content | Set-Content $file -force
Replace -notcontains "$lastweek" with -notlike "*$lastweek*" if needed for better matching.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With