AI工具:ProcessMonitor监控程序安装工具
描述DeepSeek生成的工具使用方法ANSI编码记事本保存为bat格式文件说明有错误的话可以留言或者自己找AI改下echo off title 安装监控工具精确匹配版 - 仅输出Path与ProcessName setlocal enabledelayedexpansion REM 自动提权 net session nul 21 if %errorlevel% neq 0 ( echo 正在请求管理员权限... powershell -Command Start-Process %0 -Verb RunAs -WindowStyle Maximized exit /b ) REM 检查管理员权限提权后再次确认 net session nul 21 if %errorlevel% neq 0 ( echo [错误] 无法获取管理员权限请右键以管理员身份运行。 pause exit /b 1 ) REM 定义路径 set PROCMON_URLhttps://download.sysinternals.com/files/ProcessMonitor.zip set PROCMON_ZIP_PATH%TEMP%\Procmon.zip set PROCMON_PATH%TEMP%\Procmon.exe set PML_FILE%TEMP%\InstallMonitor.pml set CSV_FILE%TEMP%\InstallMonitor.csv set OUTPUT_FILE%TEMP%\MonitoredPaths.txt set TEMP_PS1%TEMP%\FilterEvents.ps1 echo Process Monitor 安装监控工具仅输出PathProcessName REM 1. 下载 Process Monitor if not exist %PROCMON_PATH% ( echo [1/7] 正在下载 Process Monitor... powershell -Command Invoke-WebRequest -Uri %PROCMON_URL% -OutFile %PROCMON_ZIP_PATH% -UseBasicParsing if errorlevel 1 ( echo [错误] 下载失败请检查网络连接。 pause exit /b 1 ) powershell -Command Expand-Archive %PROCMON_ZIP_PATH% -DestinationPath %TEMP% -Force echo [完成] 下载成功。 ) else ( echo [1/7] Process Monitor 已存在跳过下载。 ) REM 2. 重置 Process Monitor 状态 echo [2/7] 正在重置 Process Monitor 为默认状态... taskkill /f /im Procmon.exe nul 21 if exist %PML_FILE% del %PML_FILE% nul 21 echo [完成] 已清理旧进程和日志文件。 REM 3. 获取要筛选的进程名精确匹配 echo. echo [3/7] 请输入安装程序的完整进程名精确匹配多个用逗号分隔 echo 获取进程名的方法 echo 1. 运行安装程序此时不要关闭。 echo 2. 打开任务管理器CtrlShiftEsc。 echo 3. 切换到“详细信息”标签页。 echo 4. 找到安装程序的进程复制其“名称”列的内容例如 WeChatSetup.exe。 echo 注意必须包含扩展名 .exe大小写不敏感。 echo 示例WeChatSetup.exe 或 WeChatSetup.exe,msiexec.exe set /p PROCESS_NAMES进程名 if %PROCESS_NAMES% ( echo [警告] 未输入进程名将显示所有进程的更改。 set FILTER_MODE0 ) else ( set FILTER_MODE1 echo [信息] 将精确匹配以下进程%PROCESS_NAMES% ) REM 4. 启动捕获 echo. echo [4/7] 正在启动 Process Monitor最小化... start %PROCMON_PATH% /AcceptEula /Minimized /BackingFile %PML_FILE% timeout /t 2 /nobreak nul REM 5. 等待用户安装 echo. echo [5/7] 请运行您要监控的安装程序例如腾讯会议、微信等。 echo 安装完成后返回此窗口并按任意键停止捕获... pause nul REM 6. 停止捕获 echo. echo [6/7] 正在停止捕获并关闭 Process Monitor... %PROCMON_PATH% /Terminate timeout /t 2 /nobreak nul REM 7. 导出 CSV echo [7/7] 正在将捕获数据导出为 CSV可能需要几十秒... %PROCMON_PATH% /AcceptEula /OpenLog %PML_FILE% /SaveAs %CSV_FILE% /NoFilter if errorlevel 1 ( echo [错误] 导出 CSV 失败错误码%errorlevel% echo 可能原因PML 文件损坏、磁盘空间不足、或 ProcMon 命令行参数错误。 echo 建议手动导出 echo 1. 打开 Process Monitor运行 %PROCMON_PATH%。 echo 2. 点击 File - Open选择 %PML_FILE%。 echo 3. 点击 File - Save As选择 CSV 格式保存为 %CSV_FILE%。 echo 4. 保存后按任意键继续分析... pause nul if not exist %CSV_FILE% ( echo [错误] 未找到 CSV 文件无法继续。 pause exit /b 1 ) else ( echo [完成] 手动导出成功。 ) ) else ( echo [完成] CSV 导出成功%CSV_FILE% ) REM 生成 PowerShell 分析脚本仅输出Path与ProcessName带进度条和统计 echo. echo 正在生成分析脚本仅输出 Path 和 Process Name... type nul %TEMP_PS1% 2nul if errorlevel 1 ( echo [错误] 无法创建临时脚本文件%TEMP_PS1% pause exit /b 1 ) echo $csvFile %CSV_FILE% %TEMP_PS1% echo $outputFile %OUTPUT_FILE% %TEMP_PS1% if %FILTER_MODE%1 ( echo $processNames %PROCESS_NAMES% %TEMP_PS1% ) else ( echo $processNames %TEMP_PS1% ) echo $filterMode %FILTER_MODE% %TEMP_PS1% echo. %TEMP_PS1% echo Write-Progress -Activity 分析 Process Monitor 数据 -Status 正在导入 CSV... -PercentComplete 0 %TEMP_PS1% echo # 导入 CSV %TEMP_PS1% echo $events Import-Csv $csvFile -Encoding Default %TEMP_PS1% echo if (-not $events) { %TEMP_PS1% echo Write-Host 未捕获到任何事件。 -ForegroundColor Red %TEMP_PS1% echo exit 1 %TEMP_PS1% echo } %TEMP_PS1% echo $totalEvents $events.Count %TEMP_PS1% echo Write-Host (共捕获 $totalEvents 个事件。) -ForegroundColor Green %TEMP_PS1% echo Write-Progress -Activity 分析 Process Monitor 数据 -Status 已导入 CSV -PercentComplete 20 %TEMP_PS1% echo. %TEMP_PS1% echo # 精确筛选进程 %TEMP_PS1% echo if ($filterMode -eq 1) { %TEMP_PS1% echo $names $processNames -split , ^| ForEach-Object { $_.Trim() } %TEMP_PS1% echo Write-Progress -Activity 分析 Process Monitor 数据 -Status 正在按进程名筛选... -PercentComplete 40 %TEMP_PS1% echo $filtered $events ^| Where-Object { %TEMP_PS1% echo $proc $_.Process Name %TEMP_PS1% echo if ([string]::IsNullOrEmpty($proc)) { return $false } %TEMP_PS1% echo foreach ($n in $names) { %TEMP_PS1% echo if ($proc -eq $n) { return $true } %TEMP_PS1% echo } %TEMP_PS1% echo return $false %TEMP_PS1% echo } %TEMP_PS1% echo Write-Host (筛选后剩余 $filtered.Count 个事件。) -ForegroundColor Green %TEMP_PS1% echo if ($filtered.Count -eq 0) { %TEMP_PS1% echo Write-Host 警告未找到匹配的进程名请检查输入的进程名是否正确。 -ForegroundColor Yellow %TEMP_PS1% echo Write-Host CSV 中出现的进程名示例前20个 -ForegroundColor Yellow %TEMP_PS1% echo $events ^| Select-Object -ExpandProperty Process Name -Unique ^| Select-Object -First 20 ^| ForEach-Object { Write-Host - $_ } %TEMP_PS1% echo Write-Host 请确认进程名必须包含扩展名如 .exe且与上列完全一致。 -ForegroundColor Yellow %TEMP_PS1% echo exit 1 %TEMP_PS1% echo } %TEMP_PS1% echo $events $filtered %TEMP_PS1% echo } %TEMP_PS1% echo. %TEMP_PS1% echo # 仅保留文件路径和注册表路径Path 列不为空 %TEMP_PS1% echo Write-Progress -Activity 分析 Process Monitor 数据 -Status 正在过滤空路径... -PercentComplete 60 %TEMP_PS1% echo $events $events ^| Where-Object { -not [string]::IsNullOrWhiteSpace($_.Path) } %TEMP_PS1% echo Write-Host (过滤空路径后剩余 $events.Count 个事件。) -ForegroundColor Green %TEMP_PS1% echo. %TEMP_PS1% echo # 仅输出 Path 和 Process Name去重 %TEMP_PS1% echo Write-Progress -Activity 分析 Process Monitor 数据 -Status 正在去重和排序... -PercentComplete 80 %TEMP_PS1% echo $result $events ^| Select-Object -Property Path, Process Name -Unique ^| Sort-Object Path %TEMP_PS1% echo. %TEMP_PS1% echo # 输出到文件 %TEMP_PS1% echo $result ^| Export-Csv -Path $outputFile -NoTypeInformation -Encoding UTF8 %TEMP_PS1% echo Write-Progress -Activity 分析 Process Monitor 数据 -Status 完成 -PercentComplete 100 -Completed %TEMP_PS1% echo. %TEMP_PS1% echo Write-Host n 结果汇总 -ForegroundColor Cyan %TEMP_PS1% echo Write-Host (输出文件已保存至: $outputFile ( $result.Count 个唯一路径)) -ForegroundColor Green %TEMP_PS1% echo Write-Host n监控完成。文件为 CSV 格式包含 Path 和 Process Name 两列。 -ForegroundColor Green %TEMP_PS1% echo Write-Host %TEMP_PS1% echo Write-Host 执行统计 -ForegroundColor Yellow %TEMP_PS1% echo Write-Host - 原始事件数: $totalEvents -ForegroundColor White %TEMP_PS1% echo if ($filterMode -eq 1) { %TEMP_PS1% echo Write-Host - 进程筛选后: $($filtered.Count) -ForegroundColor White %TEMP_PS1% echo } %TEMP_PS1% echo Write-Host - 非空路径后: $($events.Count) -ForegroundColor White %TEMP_PS1% echo Write-Host - 唯一路径数: $($result.Count) -ForegroundColor White %TEMP_PS1% if not exist %TEMP_PS1% ( echo [错误] 生成 PowerShell 脚本失败文件不存在%TEMP_PS1% pause exit /b 1 ) echo [完成] 分析脚本已生成%TEMP_PS1% REM 检查 PowerShell 执行策略 echo. echo [检查] 正在检查 PowerShell 执行策略... powershell -NoProfile -Command { $policy Get-ExecutionPolicy; if ($policy -in Restricted,AllSigned) { Write-Host 警告当前 PowerShell 执行策略为 $policy 可能阻止脚本运行。 -ForegroundColor Yellow; Write-Host 建议以管理员身份运行以下命令Set-ExecutionPolicy RemoteSigned -ForegroundColor Yellow; exit 1 } else { exit 0 } } if errorlevel 1 ( echo [警告] PowerShell 执行策略限制但脚本将使用 Bypass 参数尝试绕过。 echo 如果后续分析失败请按上述建议修改执行策略。 pause ) else ( echo [通过] PowerShell 执行策略正常。 ) REM 执行 PowerShell 分析 echo. echo 正在分析 CSV 数据并筛选... echo 执行命令powershell -NoProfile -ExecutionPolicy Bypass -File %TEMP_PS1% echo 分析过程可能需要几秒钟请耐心等待... set PS_OUTPUT%TEMP%\ps_output.txt powershell -NoProfile -ExecutionPolicy Bypass -File %TEMP_PS1% %PS_OUTPUT% 21 set PS_EXIT%errorlevel% type %PS_OUTPUT% del %PS_OUTPUT% nul 21 if %PS_EXIT% equ 0 ( echo. echo [成功] 分析执行成功 echo 结果文件已生成%OUTPUT_FILE% echo 该文件为 CSV 格式包含 Path 和 Process Name 两列。 ) else ( echo. echo [失败] 分析执行失败错误码%PS_EXIT% echo 请检查上述输出中的进程名示例确认正确后重新运行脚本。 pause exit /b 1 ) del %TEMP_PS1% nul 21 echo. echo 按任意键退出... pause nul exit /b 0