这就是我到目前为止所得到的
如果命令放置了第四行输出,那么正则表达式就不应该匹配,但对我来说是匹配的。
有什么想法吗?
$From = "cody@tech.com"
$To = "cody@tech.com"
$Subject = "hello"
$Body = "body"
$SMTPServer = "smtp.office365.com"
$SMTPPort = "587"
$Attachment = "c:\checkpointlog.txt"
$RE = [regex]"(?smi)^Checkpointing to checkpoint.*^MD5 \(checkpoint.*^Rotating D:\\Perforce\\Server\\journal to journal.*?$"
$output = p4d -jc
$output | add-content c:\checkpointlog.txt
if ($output -notmatch $RE) {
$param = @{
From = $From
To = $To
Subject = $Subject
Body = $Body
SmtpServer = $SMTPServer
port = $SMTPPort
Usessl = $True
Credential = $cred
Attachments = $Attachment
}
Send-MailMessage @param
Write-Host 'unexpected value, email sent'
exit
}
else {
Write-Host 'continuing script'
}Perforce命令p4 -jc的输出应该始终类似于以下3行:
Checkpointing to checkpoint.22...
MD5 (checkpoint.22) = F561234wer2B8E5123456767745645616D
Rotating D:\Perforce\Server\journal to journal.21...我想在if语句中使用regex,这样如果输出与下面的3行字符串不匹配,那么就会发送一封电子邮件和日志文件一起检查。
Checkpointing to checkpoint.*
MD5 (checkpoint.*
Rotating D:\Perforce\Server\journal to journal.*我希望用一张外卡*来说明增加的数字
任何想法都会很棒的!
发布于 2018-12-25 02:16:46
E 211E 112字符串作为输入E 213。-match运算符的LHS将使PowerShell单独匹配每个字符串的正则表达式。因此,p4d 将输出的行与新行连接起来,形成一个多行字符串,以便正则表达式可以匹配多行:
$output = (p4d -jc) -join "`n"此外,如果希望确保regex与完整的输入(而不仅仅是子字符串)匹配,请按照以下方式重新构造regex:
m (多行),以便^和$只匹配多行字符串的起始和结尾。s,以便.不匹配换行符,并显式地使用\n (而不是^)匹配换行符。$RE = '(?i)^Checkpointing to checkpoint.*\nMD5 \(checkpoint.*\nRotating D:\\Perforce\\Server\\journal to journal.*$'发布于 2018-12-24 19:14:08
$RE = [regex]"(?smi)^Checkpointing to checkpoint.*^MD5 \(checkpoint.*^Rotating D:\\Perforce\\Server\\journal to journal.*?$"
$output = p4d -jc
$output | add-content c:\checkpointlog.txt
if ($output -notmatch $RE) {
$param = @{
From = $From
To = $To
Subject = $Subject
Body = $Body
SmtpServer = $SMTPServer
port = $SMTPPort
Usessl = $True
Credential = $cred
Attachments = 'c:\checkpointlog.txt'
}
Send-MailMessage @param
exit
}发布于 2018-12-24 20:05:41
我知道你想使用RegEx,但也许这会有帮助吗?这可能不是最伟大的,但它应该有效。
$file='checkpointlog.txt'
$line1Expected="Checkpointing to checkpoint*"
$line2Expected="MD5 (checkpoint*"
$line3Expected="Rotating D:\Perforce\Server\journal to journal*"
$line1Actual=Get-Content($file) | Select -Index 0
$line2Actual=Get-Content($file) | Select -Index 1
$line3Actual=Get-Content($file) | Select -Index 2
if($line1Actual -like $line1Expected`
-and $line2Actual -like $line2Expected`
-and $line3Actual -like $line3Expected){
}else{
echo 'send mail'
}https://stackoverflow.com/questions/53916836
复制相似问题