Photo by Unsplash
841 字
4 分钟
PowerShell文件数量监控与进程管理脚本
PowerShell 文件数量监控与进程管理脚本
有时候需要根据文件数量来触发某些操作,比如文件堆积过多时自动清理进程。这篇记录一个实用的 PowerShell 监控脚本。
基础版本:单次检测
统计当前目录文件数量,等于 119 时结束所有 python 和 cmd 进程:
# 统计当前目录下的文件数量(-File 确保只统计文件,不包括子文件夹)# 使用 @() 强制转换为数组,确保在只有 0 或 1 个文件时 .Count 属性也能正常工作$fileCount = @(Get-ChildItem -File).Count
if ($fileCount -eq 119) { Write-Host "检测到文件数量为 119,正在终止 python 和 cmd 进程..." -ForegroundColor Yellow
# 使用 taskkill 强制结束进程 # /F: 强制终止进程 # /IM: 指定要终止的映像名称 # /T: 终止指定的进程及其任何子进程 # 2>$null: 隐藏找不到进程时产生的错误提示 taskkill /F /IM python.exe /T 2>$null taskkill /F /IM cmd.exe /T 2>$null
Write-Host "操作执行完毕。" -ForegroundColor Green} else { Write-Host "当前文件数量为: $fileCount,未达到 119 的触发条件。" -ForegroundColor Cyan}循环监控版本
每隔 1 秒检查一次,触发后自动退出:
Write-Host "开始监控... 当前文件夹文件数量达到 119 时将触发操作。" -ForegroundColor Cyan
while ($true) { # 获取当前目录下的文件数量 $fileCount = @(Get-ChildItem -File).Count
if ($fileCount -eq 119) { Write-Host "`n[!] 触发条件达成!当前文件数量为 119。" -ForegroundColor Yellow Write-Host "正在终止所有的 python 和 cmd 进程..." -ForegroundColor Yellow
# 强制结束进程及其子进程,隐藏未找到进程的报错 taskkill /F /IM python.exe /T 2>$null taskkill /F /IM cmd.exe /T 2>$null
Write-Host "操作执行完毕,监控脚本现已退出。" -ForegroundColor Green
# 退出 while 循环,脚本执行结束 break }
# 暂停 1 秒后继续下一次检查 Start-Sleep -Seconds 1}进阶版本:后台静默运行
创建 .bat 文件实现双击即运行,隐藏 PowerShell 窗口:
@echo off:: 以隐藏窗口的方式启动 PowerShell 脚本powershell -WindowStyle Hidden -File "monitor_kill.ps1"或者使用 VBS 脚本实现完全静默:
Set WshShell = CreateObject("WScript.Shell")WshShell.Run "powershell -File monitor_kill.ps1", 0, FalseSet WshShell = Nothing关键参数说明
taskkill 参数
| 参数 | 说明 |
|---|---|
/F | 强制终止进程 |
/IM | 指定映像名称(进程名) |
/T | 终止进程及其所有子进程 |
PowerShell 参数
| 参数 | 说明 |
|---|---|
-File | 只统计文件,不包括目录 |
@() | 强制转换为数组,确保 .Count 属性可用 |
2>$null | 将错误输出重定向到空,隐藏报错 |
扩展功能
监控多个条件
$fileCount = @(Get-ChildItem -File).Count$folderCount = @(Get-ChildItem -Directory).Count$totalSize = (Get-ChildItem -File | Measure-Object -Property Length -Sum).Sum / 1MB
if ($fileCount -eq 119 -or $totalSize -gt 1000) { Write-Host "触发清理条件" -ForegroundColor Red # 执行清理...}记录日志
$logFile = "monitor.log"$timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
"[$timestamp] 当前文件数: $fileCount" | Out-File -Append $logFile发送通知
# Windows 10/11 通知Add-Type -AssemblyName System.Windows.Forms[System.Windows.Forms.MessageBox]::Show("文件数量达到阈值!", "警告", "OK", "Warning")安全注意事项
风险提示
执行策略:首次运行 PowerShell 脚本可能遇到执行策略限制
Terminal window Set-ExecutionPolicy RemoteSigned -Scope CurrentUser自我终止:如果在 cmd 中通过
powershell -file ...调用此脚本,杀死 cmd 进程会导致调用窗口关闭进程影响:
taskkill /F是强制终止,可能导致数据丢失,谨慎使用
参考链接
PowerShell文件数量监控与进程管理脚本
https://im.awsl.app/posts/ai-automation/054-powershell-file-monitor/