2017-08-10 271 views
2

CMDまたはVBScriptを使用して特定の記述からプロセスIDまたはイメージ名を取得する最も簡単な方法は何ですか?例えばVBScriptの説明付きのプロセスIDを取得

enter image description here

Description = "My application*"は、私はIDのは、その説明を持つすべてのプロセスを取得したいです。ヘルプ

wmic /? 
wmic process get /? 

ため

答えて

1
wmic process where description='notepad.exe' get processed 

はそれを行う方法です。上記はコマンドですが、VBScriptは同じオブジェクトにアクセスできます。ここにはオブジェクトRetrieving Information from Task Manager using Powershellを使った投稿があります。

+0

ないPowerShellを、CMDコマンドまたはVBScriptを使用してPLS – Juran

+0

PSは、すべてのウィンドウのと同じオブジェクトへのアクセスを持っているが、それは、PowerShellのCMDではありません言語はそうする。 – Acat

0

tasklist-commandはあなたのための解決策である可能性があります。

tasklist /FI "IMAGENAME eq MyApplication*" 

また、結果のさらなる処理のために有用であり得るCSVで出力をフォーマットするパラメータました。

3

プロセスを列挙する最も良い方法はWMIです。しかし、残念ながらWin32_ProcessクラスのDescriptionプロパティは、タスクマネージャが "Description"フィールドに表示する情報ではなく、実行可能な名前のみを格納します。その情報は、実行可能ファイルのextended attributesから取得されます。

あなたはVBScriptのと同じことを行うことができますが、それは追加のコードが必要です。

descr = "..." 

Set wmi = GetObject("winmgmts://./root/cimv2") 
Set app = CreateObject("Shell.Application") 
Set fso = CreateObject("Scripting.FileSystemObject") 

Function Contains(str1, str2) 
    Contains = InStr(LCase(str1), LCase(str2)) > 0 
End Function 

'Define an empty resizable array. 
ReDim procs(-1) 

For Each p In wmi.ExecQuery("SELECT * FROM Win32_Process") 
    dir = fso.GetParentFolderName(p.ExecutablePath) 
    exe = fso.GetFileName(p.ExecutablePath) 

    Set fldr = app.NameSpace(dir) 
    Set item = fldr.ParseName(exe) 

    'Determine the index of the description field. 
    'IIRC the position may vary, so you need to determine the index dynamically. 
    For i = 0 To 300 
     If Contains(fldr.GetDetailsOf(fldr, i), "description") Then Exit For 
    Next 

    'Check if the description field contains the string from the variable 
    'descr and append the PID to the array procs if it does. 
    If Contains(fldr.GetDetailsOf(item, i), descr) Then 
     ReDim Preserve procs(UBound(procs) + 1) 
     procs(UBound(procs)) = p.ProcessId 
    End If 
Next 
関連する問題