Skript beim Beenden des Prozesses gemäß den Fenstern zum Speicherbedarf

849
Frankruss

Ich bin auf der Suche nach einem Stapel- oder Powershell-Skript, das, wenn der von einem Prozess verwendete Speicher weniger als 10 MB beträgt, diesen Prozess beendet und neu startet. Ich habe versucht, viel zu suchen, konnte aber keine endgültige Lösung finden.

Dies ist das Skript, das ich ausprobiert habe, aber es funktioniert nicht. Bitte helfen, danke!

: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 
0
Auf eine solche Frage erhalten Sie keine Antwort, da Superuser kein kostenloser Skriptschreibservice ist. Bitte zeigen Sie uns Ihre Forschung und welche Probleme Sie bei der Implementierung hatten, dann helfen wir Ihnen gerne weiter. SimonS vor 5 Jahren 0
Ich habe das Skript hinzugefügt, das ich ausprobiert habe. Danke für den Rat. Frankruss vor 5 Jahren 1
** weniger als 10 MB? Ich kann verstehen, dass ich Prozesse neu starten möchte, die zu viel Speicher benötigen, aber nicht zu wenig. Was versuchst du zu lösen? Richard vor 5 Jahren 0

1 Antwort auf die Frage

1
SimonS

Dies wäre eine PowerShell-Lösung:

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 } } 

Zuerst sucht es nach allen iexploreProzessen und filtert dann in whereallen Prozessen, die einen RAM-Verbrauch von 10 MB oder weniger aufweisen. Für jeden Prozess, der mit dem übereinstimmt where, wird der Prozess angehalten und neu gestartet

Edit: es sieht aus wie Sie dies in einer Endlos - Schleife ausgeführt werden soll, wenn ja, nur wickeln Ihr Skript in einer whileSchleife wie diese

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 } 

Wenn es keinen Pfad gibt:

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 } 
Vielen Dank. Ich danke Ihnen vielmals. Ich bin fast da, aber es gibt ein Problem mit Ihrem Skript. Ich wollte kontinuierlich nach einem Prozess suchen, der besagt, dass bei einem Speicher unter 10 MB die Anwendung neu startet. Der Prozess wird gemäß dem Skript gestartet Wenn jedoch der verwendete Speicher mehr als 10 MB beträgt, wird das Problem behoben. Und als letztes möchte ich noch eine Bedingung hinzufügen, die den Prozess nur dann neu startet, wenn weniger als 10 MB und das Internet funktioniert. Wenn dieser Ping 8.8.8.8 ist, ist dies der Fall wahr. Ich könnte cmd tun, aber ich weiß nicht, dass mucj = h in Powershell ist. THANKS SIR. Frankruss vor 5 Jahren 0
@Frankruss Ich habe etwas Logik hinzugefügt, funktioniert es jetzt richtig? SimonS vor 5 Jahren 0
Sir, ich danke Ihnen für Ihre Unterstützung. Ich wollte, dass, wenn beide Bedingungen erfüllt sind, dh der Speicher weniger als 10 MB und das Internet nicht funktioniert, der Prozess nur neu gestartet wird. Die Logik startet den Prozess nur dann neu, wenn das Internet funktioniert und die Speicherbedingung erfüllt ist das Internet schließt den Prozess, startet ihn jedoch nicht erneut. THANKS. Frankruss vor 5 Jahren 0
@Frankruss ok, jetzt sollte es sich so verhalten, wie du es willst. obwohl ich das internet nicht verstanden habe. Es würde jetzt neu gestartet, wenn Ping 8.8.8.8 erreichen kann. Wenn Sie neu starten möchten, wenn Ping NICHT 8.8.8.8 erreicht, ändern Sie "if ($ Path -and $ Ping)" in "if ($ Path -and! $ Ping)" SimonS vor 5 Jahren 0
Jetzt startet das Skript den Prozess nicht einmal neu, ob das Internet funktioniert oder nicht. Frankruss vor 5 Jahren 0
@Frankruss für mich funktioniert es einwandfrei. es tut nur etwas, wenn es keine Internetverbindung gibt / gibt und wenn der Prozess eine Path-Eigenschaft hat. Wenn Sie `Get-Process iexplore | ausführen Pfad auswählen` Ist der Pfad leer oder nicht? Wenn es leer ist, können Sie das neue verwenden, das ich zur Antwort gegeben habe. Ich meine, es ist ein ziemlich dummes Skript. Hier kann nicht viel schief gehen, wenn Sie es genau so implementieren, wie ich es in meiner Antwort geschrieben habe. Bekommen Sie eine Fehlermeldung? SimonS vor 5 Jahren 0
THNKS SIR.Es funktioniert jetzt. Frankruss vor 5 Jahren 1