我正在寻找一个批处理或 powershell 脚本,如果某个进程使用的内存少于 10 MB,则结束该进程并重新启动它。我尝试了很多次搜索,但找不到最终的解决方案。
这是我试过的脚本,但是不起作用。请帮忙,谢谢!
:start
@ECHO OFF
SET procName=iexplorer.exe
SET RAMLimit=10240
FOR /F "tokens=*" %%F IN ('tasklist^|findstr %procName%') DO SET foundString=%%F
FOR /F "tokens=5" %%F IN ("%foundString%") DO SET RAMConsumption=%%F
IF %RAMConsumption% LEQ %RAMLimit% && ping 8.8.8.8 -n 6 | FIND /I "out"
if errorlevel 0 (
TASKKILL /IM %procName%
) else (
echo iexplorer is working
)
goto start
答案1
这是一个 PowerShell 解决方案:
Get-Process iexplore -ea 0 | where { $_.PM -le 10MB } | foreach {
$Path = $_.Path
[bool]$Ping = Test-Connection 8.8.8.8 -Quiet
if ($Path -and $Ping) {
Stop-Process $_ -Force
Start-Process $Path
}
}
首先,它会查找所有iexplore
进程,然后过滤掉where
所有 RAM 消耗小于或等于 10MB 的进程。对于符合条件的每个进程where
,它会停止并重新启动该进程
编辑:看起来您想要在无限循环中运行它,如果是这样,只需将您的脚本包装在while
这样的循环中
while ($true) {
Get-Process iexplore -ea 0 | where { $_.PM -le 10MB } | foreach {
$Path = $_.Path
[bool]$Ping = Test-Connection 8.8.8.8 -Quiet
if ($Path -and $Ping) {
Stop-Process $_ -Force
Start-Process $Path
}
}
sleep -s 1
}
如果没有路径:
while ($true) {
Get-Process iexplore -ea 0 | where { $_.PM -le 10MB } | foreach {
[bool]$Ping = Test-Connection 8.8.8.8 -Quiet
if ($Ping) {
Stop-Process $_ -Force
Start-Process iexplore
}
}
sleep -s 1
}