Я ищу пакетный сценарий или сценарий powershell, который, если память, используемая процессом, занимает менее 10 МБ, завершает этот процесс и перезапускает его.Я много пробовал искать, но не смог найти окончательного решения.

Это скрипт, который я пробовал, но он не работает. Пожалуйста, помогите, спасибо!

: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 ответ1

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 все процессы , которые имеют меньше или равно потреблению 10MB RAM. Для каждого процесса, который соответствует where , он останавливается и перезапускает процесс

Edit: это выглядит , как вы хотите запустить это в бесконечном цикле, если это так, просто обернуть сценарий в 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
}

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .