Script su Ending Process in base al consumo di memoria di Windows 10


1

Sto cercando uno script batch o powershell che, se la memoria utilizzata da un processo è inferiore a 10 MB, termina quel processo e lo riavvia. Ho provato a cercare molto, ma non sono riuscito a trovare la soluzione definitiva.

Questa è la sceneggiatura che ho provato ma non funziona. Per favore, grazie!

: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

non otterrai una risposta a una domanda del genere, perché superuser non è un servizio di scrittura di script gratuito. Per favore, mostraci la tua ricerca e quali problemi hai riscontrato durante l'implementazione, quindi siamo lieti di aiutarti.
Simone

1
Ho aggiunto la sceneggiatura che ho provato. Grazie per un consiglio.
Frankruss,

Meno di 10 MB? Capisco il desiderio di riavviare i processi che occupano troppa memoria, ma non troppo poco. Cosa stai cercando di risolvere?
Richard,

Risposte:


2

Questa sarebbe una soluzione 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
    }
}

per prima cosa cerca tutti i iexploreprocessi, quindi filtra in wheretutti i processi che hanno un consumo di RAM inferiore o uguale a 10 MB. Per ogni processo che corrisponde a where, si interrompe e riavvia il processo

Modifica: sembra che tu voglia eseguirlo in un ciclo infinito, in tal caso, basta avvolgere il tuo script in un whileciclo come questo

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
}

se non c'è percorso:

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
}

Grazie signore. Ci sono quasi. Ci sono quasi ma c'è qualche problema con il tuo script. Volevo controllare continuamente un processo che se la memoria ha meno di 10 MB l'applicazione si riavvia. Il processo viene riavviato come da tuo script .ma se la memoria utilizzata è superiore a 10 MB rispetto a quando si blocca. Infine, vorrei aggiungere anche una condizione che riavvii il processo solo se meno di 10 MB e Internet funziona, come quando questo ping 8.8.8.8 è true.Potrei fare cmd ma non conosco mucj = h in powershell.Grazie SIR.
Frankruss,

@Frankruss Ho aggiunto un po 'di logica, ora funziona correttamente?
Simone

Signore, grazie per il vostro supporto. Volevo che se entrambe le condizioni fossero vere, cioè la memoria fosse inferiore a 10 MB e Internet non funzionasse, riavviate solo il processo. La logica riavvia il processo solo se Internet funziona e le condizioni di memoria sono vere. Ma quando mi disconnetto Internet chiude il processo ma non lo riavvia di nuovo. GRAZIE.
Frankruss,

@Frankruss ok, ora dovrebbe comportarsi come vuoi tu. anche se non ho capito la parte di Internet. si riavvierebbe ora se il ping può raggiungere 8.8.8.8. se si desidera riavviare se il ping NON raggiunge l'8.8.8.8, passare if ($Path -and $Ping)aif ($Path -and !$Ping)
SimonS

1
GRAZIE SIR. Ora funziona.
Frankruss,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.