2012-04-22 20 views
16

異なる場所から実行している3つのアプリケーションインスタンスがあります。すべてのプロセスの名前は似ています。ファイル名でプロセスを終了する

どのように特定の場所から起動されたプロセスを強制終了できますか?

答えて

30

あなたはアプリケーションのパスを取得することができます。リモートプロセスを終了するには:

Get-WmiObject Win32_Process -Filter "ExecutablePath LIKE '%something%'" -ComputerName server1 | Invoke-WmiMethod -Name Terminate 
+4

最初の解決策はありましたが、何も設定していません – rpeshkov

+1

- ちょっと安全スイッチだったのですか? –

+3

すべてのプロセスを '-like" * "'でマッチングしてコマンドを実行すると、システムがクラッシュします –

0

Processクラスの中のMainModuleプロパティ(powershellで呼び出すことができます)をご覧ください。

foreach (Process process in Process.GetProcesses()) 
{ 
    if (process.MainModule.FileName == location) 
    { 
     process.Kill(); 
    } 
} 

このコードを呼び出す際に発生する可能性のある例外も考えてみます。これは、存在しなくなった(GetProcessが最後に呼び出されてから強制終了された)プロセスにアクセスしようとしている場合、またはアクセス権がない場合にプロセスにアクセスしようとしている場合に発生する可能性があります。

Get-Process | Where-Object {$_.Path -like "*something*"} | Stop-Process -WhatIf 

ローカルマシンでのみ動作します:

2

これを試してみてください:それは私のセットアップ(のPowerShellのバージョン4にうまく仕事を働かなかったよう http://technet.microsoft.com/en-us/library/ee177004.aspx

Stop-Process -processname notepad 
+0

あなたの答えをありがとう、しかしそれは私の仕事を解決しません。 – rpeshkov

+0

ああ、同意した。私はあなたがすべてではなくて1つを殺す必要があることに気付かなかった。あなたはIDでプロセスをいつでも殺すことができます:) "kill 1432"のようなものです。 – Roland

0

私は、少しシェイレヴィの答えを改善したいと思います)

Get-Process | Where-Object {$_.Path -like "*something*"} | Stop-Process -processname {$_.ProcessName} 
0

以下のコマンドは、「something」がパスの一部またはコマンドラインパラメータであるプロセスを強制終了します。また、場所c:\my-placeからsomething.ps1を実行するPowerShellのスクリプトなど
powershell -command c:\my-place\something.ps1を終了させるために有用証明:

gwmi win32_process | Where-Object {$_.CommandLine -like "*something*"} | % { "$(Stop-Process $_.ProcessID)" } 

ソリューションは、私の64ビット版のWindows 10マシン上でローカルに動作します。