2016-05-28 2 views
0

私はここでいくつかの助けが必要です。プロセスとタスクスキルのコマンドラインを取得

私は現在、しかし、それは動作していないので、同様にホワイトリスト(コマンドライン)にない任意のプロセスを強制終了しようとしています。:

上記のコマンドで
+0

wmicコマンドラインに「get」はありません。 –

+0

@Noodlesありがとう!それを逃した。ただし、ホワイトリストに登録されていない場合でも、すべてのプロセスは「OK」と表示されます。 – DropItLikeItsHot

答えて

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

@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 
) 
findstrはなり一致する場合は wmicとなるので、 は常にです。例えば、少なくとも cmdは、 wmiccmdウィンドウで実行されるため一致します。次に がコメントコードスニペットが機能するはずですが、昇格された場合(管理者として実行)異なる結果が得られます。

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(次のリストは、少し古くなっている可能性があり):

...ここにWindowsが正しく を実行するために必要な基本的なプロセスのリストです。

  • システムアイドルプロセス
  • explorer.exeの
  • Taskmgr.exeのspoolsv.exeの
  • LSASS.EXE
  • のCsrss.exe
  • SMSS.EXE
  • Winlogonプロセス。 exe
  • svchost.exe - (いくつかのこれらのプロセスのいずれかが シャットダウンされた場合ESE)
  • これらのプロセス以外のものをシャットダウンすることでSERVICES.EXE

、スタンドアローン Windowsは細かい動作しなければならないが、しかし、Windowsが不安定になったり、使用できなくなることを開始します。

+0

これは動作しないので、get CommandLineを使用する必要があります。これはsvchostでもNO と報告しています。 – DropItLikeItsHot

+0

@JesseBropez申し訳ありません。あなたはあなたが望む物件を手に入れることができます。私は、ほとんどの 'svchost'を' OK 'と報告していると確信しています。今 'XX '並びに他の非存在プロセス等報告すべきである(いくつかの) 'svchost'固定(例えば' cmd'を、 'wmic'、' find'等rem' 'で既に述べました)。 – JosefZ

+0

私は見る!助けてくれてありがとうJosefZ!私はいくつかの重要なプロセスを追加することを忘れてしまった。 – DropItLikeItsHot

関連する問題