![根据内存消耗结束进程的脚本 windows 10](https://linux22.com/image/1574778/%E6%A0%B9%E6%8D%AE%E5%86%85%E5%AD%98%E6%B6%88%E8%80%97%E7%BB%93%E6%9D%9F%E8%BF%9B%E7%A8%8B%E7%9A%84%E8%84%9A%E6%9C%AC%20windows%2010.png)
我正在寻找一个批处理或 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
}