Silly me, I assumed that the executable path was the requirement. My bad.
If you need to find a process just by it's name, it is even simpler: Just indicate the process name (possibly with wildcards) to Get-Process (alias
ps):
ps Notepad++ | kill
Actually, kill (alias for Stop-Process) takes a name parameter directly, so the "kill" line from the script could be written as simply
kill notepad++
But your question is actually really good, because what if we did not know the neither the process name nor the executable, but -say- only the Window title?
Get-process (alias ps) will produce a sequence objects describing the running processes.
If I want to know what properties those objects have that I can possibly filter on, I
can pipe the objects through the Get-Member cmdlet (alias gm):
ps | gm
This produces a table-formatted list like this (shortened):
TypeName: System.Diagnostics.Process
Name MemberType Definition
---- ---------- ----------
Handles AliasProperty Handles = Handlecount
Name AliasProperty Name = ProcessName
...
MainModule Property System.Diagnostics.ProcessModule MainModule {get;}
MainWindowHandle Property System.IntPtr MainWindowHandle {get;}
MainWindowTitle Property string MainWindowTitle {get;}
MaxWorkingSet Property System.IntPtr MaxWorkingSet {get;set;}
...
Site Property System.ComponentModel.ISite Site {get;set;}
StandardError Property System.IO.StreamReader StandardError {get;}
StandardInput Property System.IO.StreamWriter StandardInput {get;}
StandardOutput Property System.IO.StreamReader StandardOutput {get;}
StartInfo Property System.Diagnostics.ProcessStartInfo StartInfo {get;set;}
...
Product ScriptProperty System.Object Product {get=$this.Mainmodule.FileVersionInfo.ProductName;}
ProductVersion ScriptProperty System.Object ProductVersion {get=$this.Mainmodule.FileVersionInfo.ProductVersion;}
Lo and behold, there is a property called
MainWindowTitle. So to stop a process by it's main window title I could write:
ps | ? MainWindowTitle -eq 'Deepthought Main Console' | kill
That is, find all processes, pipe them through a filter selecting only those where the
MainWindowTitle equals the desired text, and pipe those processes to the Stop-Process cmdlet