You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell检测日志关键字并终止进程失效问题求助

PowerShell脚本修正:检测日志关键字并终止进程

问题根源分析

  1. 匹配逻辑错误:原脚本中$content -eq "@LM_CRITICAL[5310]"的写法存在问题。Get-Content返回的是字符串数组(文件的每一行对应一个数组元素),-eq运算符在此场景下会执行数组完全匹配——只有当日志文件的每一行都完全等于目标字符串时,条件才会成立,这和你需要的「检测是否存在任意一行包含关键字」的需求完全不符。
  2. 效率问题:Get-Content会将整个日志文件加载到内存,对于大文件来说效率较低。

修正后的脚本

function Get-TimeStamp {    
    return "[{0:MM/dd/yy} {0:HH:mm:ss}]" -f (Get-Date)    
}

# 定义可配置变量,方便后续修改
$logFilePath = "S:\logs\processservice\processservice.log.txt"
$outputLogPath = "C:\temp\outlog.txt"
$targetKeyword = "@LM_CRITICAL[5310]"
$targetProcess = "Processservice.exe"

# 使用Select-String直接检测关键字,-Quiet返回布尔值,高效且逻辑准确
if (Select-String -Path $logFilePath -Pattern $targetKeyword -Quiet) {
    $logMsg = "$(Get-TimeStamp) Found $targetKeyword. Terminating $targetProcess process."
    Add-Content -Path $outputLogPath -Value $logMsg
    taskkill /im $targetProcess /f
}
else {
    $logMsg = "$(Get-TimeStamp) $targetKeyword not found in $logFilePath."
    Add-Content -Path $outputLogPath -Value $logMsg
}

关键修正说明

  • 匹配逻辑修正:使用Select-String -Quiet直接在日志文件中查找关键字,返回布尔值,准确判断是否存在目标内容,无需加载整个文件到内存。
  • 日志输出优化:用Add-Content替代Write-Output | Out-File -Append,写法更简洁,功能完全一致。
  • 可维护性提升:将路径、关键字、进程名提取为独立变量,后续修改无需改动核心逻辑。

内容的提问来源于stack exchange,提问作者jimmyafflick

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 07:51:12