我有一个脚本,它应该查看一个日志文件,该文件开始填充数百行。当日志填充时,我需要同时寻找两个不同的条件。如果我找到"成功完成",那么它将中断 while 循环并继续脚本的其余部分。如果在脚本中发现"错误",它将重新启动服务器。不幸的是,这对我不起作用。它只是坐到秒表超时。我不太确定这里出了什么问题。有没有更好的方法可以做到这一点?
$Comp="ServerA.domain"
$Logfile="\$CompLogslogfile1.txt"
$pattern1 = "Completed Successfully"
$Pattern2 = "Error"
$timeout = new-timespan -Minutes 5
$stopwatch = [diagnostics.stopwatch]::StartNew()
while ($stopwatch.elapsed -lt $timeout){
try{
$logContent2 = Get-Content -Path $Logfile -Tail 1000 | Select-String -Pattern $Pattern2 | Measure-Object | Select-Object -ExpandProperty Count
$logContent1 = Get-Content -Path $Logfile -Tail 1000 | select-string -pattern $pattern1 | Measure-Object | Select-Object -ExpandProperty Count
If ($logContent1 -gt 0) {
Write-Host -Object "Compiled Successfully on $Comp"
#break;
}
ElseIf ($logContent2 -gt 0) {
Write-Host -Object "Error Found on $Comp! Restart required. Rebooting..."
Restart-Computer -ComputerName $Comp -Wait -For PowerShell -Force
}
}
Catch{
$Error[0] > \$CompLogsErrorLog.txt
}
}
If ($stopwatch.elapsed -ge $timeout){
Write-Error -Message "$pattern1 did not appear" -ErrorAction Stop
exit;
}
是的!我不小心在错误的地方放置了一个休息点。此问题已解决。上面的代码有效,但您需要中断循环(我的代码在错误的地方中断(,并且在此示例中,我没有在代码中包含中断。