2011-09-22 3 views
1

実行中のプロセスのリストを取得し、2つのプロセス名でフィルタリングしようとしています。私はこれまでのところ、それが作業し、一つのプロセス名フィルタリング持っ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 

は、私が作品を試みた2人のプロセス名だけをフィルタリングしています。何か案は?

答えて

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

私はよくこの試す理解場合:OR、AND、LIKEなどのような

$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演算子:

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 
関連する問題