2016-05-28 12 views
0

Ich brauche Hilfe hier.Get Kommandozeile von Prozess und Taskkill

Ich bin derzeit versucht, jeden Prozess zu töten, die nicht in einer weißen Liste (Kommandozeile) ist wie so, aber ist es nicht .:

@echo off 
setlocal 

set "whitelist=DcomLaunch RPCSS LocalServiceNetworkRestricted netsvcs LocalService LocalSystemNetworkRestricted NetworkService LocalServiceAndNoImpersonation taskhostex cmd dwm conhost services smss SearchIndexer Isass Explorer csrss conhost cftmon" 

for /f "tokens=2 delims=," %%I in (
'wmic process get executablepath^,status /format:csv ^| find "\"' 
) do (
set "proc=%%~I" 
setlocal enabledelayedexpansion 
set /p "=%%~I: "<NUL 
wmic path win32_process get CommandLine | findstr /i "%whitelist%" >NUL && (
    echo OK 
) || (
    echo UNACCEPTABLE! 
    taskkill /im "%%~nxI" /f 
) 
endlocal 
) 
+0

Kein 'Get' in der WMIC-Befehlszeile eins. –

+0

@Noodles Danke Mann! Verpasst das. Es funktioniert jedoch nicht und behauptet, dass alle Prozesse "OK" sind, selbst wenn sie nicht in der Whitelist sind. – DropItLikeItsHot

Antwort

1
wmic path win32_process get CommandLine | findstr /i "%whitelist%" 

In obigem Befehl arbeitet, würde findstr aussehen für ein Spiel in gesamte wmic Ausgabe so wird es eine Übereinstimmung finden immer. Zum Beispiel würde mindestens cmd übereinstimmen, weil wmic in einem cmd Fenster läuft. Weiter kommentiert Code-Snippet sollte funktionieren, aber es gibt andere Ergebnisse, wenn erhöht (als Administrator ausführen).

set "whitelist=DcomLaunch RPCSS LocalServiceNetworkRestricted netsvcs LocalService LocalSystemNetworkRestricted NetworkService LocalServiceAndNoImpersonation taskhostex cmd dwm conhost services smss SearchIndexer Isass Explorer csrss conhost cftmon" 

rem add windows VITAL processes !!! incomplete !!! 
set "whitelist=svchost ctfmon lsass winlogon %whitelist%" 

for /f "tokens=2,3 delims=," %%I in (
    'wmic process get executablepath^,ProcessID^,status^,WindowsVersion /format:csv ^| find "\"' 
) do ( 
    set "proc=%%~I" 
    set "procID=%%~J" 
    setlocal enabledelayedexpansion 

    rem debugging: set /p "=%%~I: "<NUL 

    rem debug try: wmic path win32_process where "ProcessID=%%J" get Name 2>NUL | findstr /i "%whitelist%">NUL 2>&1 && (
    rem debug try: wmic path win32_process get executablepath 2>NUL | findstr /i "!proc:/=//!">NUL 2>&1 && (

    wmic path win32_process where "ProcessID=%%J" get CommandLine 2>NUL | findstr /i "%whitelist%">NUL 2>&1 && (
    rem suppress "No Instance(s) Available" report in above line: 2>NUL 
     echo OK %%J "%%~I" 
    ) || (
     rem UNWANTED: here come inactive processes "cmd", "wmic", "find" 
     rem   and maybe more ones that were active in FOR %%I execution time 
     rem   (but loop continues); let's filter them here: 
     tasklist /FI "PID eq %%J" /NH | find "%%J" >NUL 2>&1 && (
      echo NO %%J "%%~I" 
      rem taskkill /PID "%%~J" /f 
     ) || (
      echo XX %%J "%%~I" 
      rem inactive at the moment 
     ) 
    ) 
    endlocal 
) 

Essential Processes needed to run Windows (nächste Liste kann ein bisschen veraltet):

... hier ist eine Liste der wesentlichen Prozesse, die Windows korrekt ausgeführt werden muss.

  • System Idle Prozess
  • explorer.exe
  • taskmgr.exe
  • spoolsv.exe
  • lsass.exe
  • CSRSS.exe
  • smss.exe
  • winlogon. exe
  • svchost.exe - (Es wird ein paar th. geben ese)
  • services.exe

von etwas anderes als diese Prozesse herunterzufahren, stand alone sollte arbeiten die Windows in Ordnung, sind jedoch, wenn eine dieser Prozesse shutdown, wird Windows gestartet werden instabil oder unbrauchbar werden.

+0

Das funktioniert nicht und ich brauche die Befehlszeile. Dies meldet sogar Svchost als NO . – DropItLikeItsHot

+0

@JesseBropez Entschuldigung; Sie können die gewünschte Eigenschaft erhalten. Ich bin mir ziemlich sicher, dass es die meisten 'svchost' als' OK 'meldet. Nun behoben, so dass (einige) "svchost" als "XX " sowie andere nicht existierende Prozesse (z. B. 'cmd',' wmic', 'find' etc. bereits in' rem' erwähnt) gemeldet werden sollten. – JosefZ

+0

Ich sehe! Danke für die Hilfe JosefZ! Ich hatte vergessen, einige andere kritische Prozesse hinzuzufügen und Windows starb weiter :) – DropItLikeItsHot