2011-09-22 59 views
1

我想獲得正在運行的進程的列表並通過兩個進程名稱進行篩選 - 任何人都可以告訴我如何獲得此工作?Powershell - 通過多個名稱篩選WMIObject進程

我到目前爲止已經得到它的工作,並篩選出一個進程名稱:

$rn = Get-WMIObject Win32_Process -computer servername ` 
    -credential mydomain\administrator -filter "Name='program1.exe'" | 
    select -expand path 
$lst = Get-Content 「C:\path\path2\List.txt」 
Compare-Object $lst $rn 

我希望它做的是過濾器兩種工藝的名字,但沒有我嘗試過的作品。有任何想法嗎?

回答

1

創建過程的數組你後:

$processes = @('winword.exe', 'notepad.exe', 'excel.exe') | ` 
    % { 
     $rn = Get-WMIObject Win32_Process -computer servername -credential mydomain\admin -filter "Name='$_'" | select -expand path 
     #$lst = Get-Content 「C:\path\path2\List.txt」 
     #Compare-Object $lst $rn 
     write-host $rn 
    } 

我已經評論了你的比較,所以你可以看到我們是如何循環遍歷數組。

0

如果我深知試試這個:

$rn = Get-WMIObject Win32_Process -computer servername -credential mydomain\administrator -filter "Name='program1.exe OR Name='program2.exe'" 
Compare-Object $rn[0].path $rn[1].path # if there are only one instance for process with name program1.exe and program2.exe 
3

使用WQL運營商如OR,AND,LIKE等:

Get-WMIObject Win32_Process -computer servername -credential mydomain\administrator -filter "Name='program1.exe' OR Name='program2.exe'" 
5

這裏是如何得到了一套完整的符合您感興趣的進程名的列表,它處理的對象。

$ProcessNames = @('explorer.exe', 'notepad.exe') 

Get-WmiObject Win32_Process -Computer 'localhost' | 
    Where-Object { $ProcessNames -contains $_.Name } | 
    Select-Object ProcessID, Name, Path | 
    Format-Table -AutoSize 

本示例查找所有進程,然後將它們發送到一個管道過濾該列表過濾器,用於檢查進程名稱是否包含在感興趣的進程名稱列表中。以這種方式使用管道的主要好處是可以輕鬆訪問返回進程的其他屬性(如ProcessID)。

ProcessID Name   Path 
--------- ----   ---- 
    5832 explorer.exe C:\Windows\Explorer.EXE 
    4332 notepad.exe C:\Windows\system32\NOTEPAD.EXE 
    2732 notepad.exe C:\Windows\system32\notepad.exe