Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
4.6k views
in Technique[技术] by (71.8m points)

Powershell custom date and time in search

Newbie PS Question - Revising question as I think I am about 95% to my solution based on community help so far.

My PS script is querying a .log file and if it matches a -15 minute rule as well as a text selection, it pulls all of the records I want. Which is fantastic.

The issue I have is that I need to email the results to me if those conditions are met. As you can see in the code below, i have the mail setup, but when it comes to the body of the email I get no data. I have tried setting Body = $body but it breaks. Any suggestions on how to get this sorted?

Current Code:

$qtime = Get-Date (Get-Date).AddMinutes(-15) -Format 'yyyyMMddHHmm'
$srch = [regex]::Escape('Licensing: no speech license available for the feature')
$SEL = Select-String -Path C:ProgramDataNuanceEnterprisesystemdiagnosticLogs
rs.log -Pattern "Licensing: no speech license available for the feature"
 
if ($SEL -ne $null)
{
 $body =  Get-Content C:ProgramDataNuanceEnterprisesystemdiagnosticLogs
rs.log | Where  { $_ -gt $qtime -and $_ -match $srch}
    #    Send-MailMessage -From 'me@domain.com' -To  'me@domain.com' -Subject 'TTS License Error Detected on ServerA' -SmtpServer 'smtp.domain.com' -body $body
}
else
{
    ## Do Nothing
}

Thanks in advance -

J


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

You could try to extract the first 14 characters of each line and parse them as a [datetime] value, but you don't actually need to do that.

Big-endian date formats (like your YYYYMMddHHmmss format for example), are alphabetically ordered - that is, if one date predates another, it will also precede it when sorted alphabetically.

That means we can just use a date/time string of the same format, describing the cutoff date, and then compare the lines from the log file to that:

$since = Get-Date (Get-Date).AddYears(-4) -Format 'YYYYMMdd'

# this will only return the last 4 years worth of logs
Get-Content old.log | Where { $_ -gt $since } 

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...