Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
This blog corresponds to the scripting guy column with the same title. I am posting the script for doing the same with PowerShell
1: $processes = get-wmiobject -query "Select * from win32_process where name = 'notepad.exe'"
2:
3: if ($processes.count -le 2 )
4: {
5: return
6: }
7:
8: $datetarget = [DateTime]::Now
9:
10: foreach ($process in $processes)
11: {
12: $dateholder = $process.CreationDate
13: $dateholder = $process.ConvertToDateTime($dateholder)
14:
15: if ( $dateholder -le $datetarget)
16: {
17: $processid = $process.ProcessID
18: $datetarget = $dateholder
19: }
20:
21: }
22:
23:
24: $processes = get-wmiobject -query " select * from win32_process where name='notepad.exe' AND processID <> $processid"
25:
26: foreach ($process in $processes)
27: {
28: $process.Terminate()
29: }
Comments
- Anonymous
May 09, 2007
Or, as a one-liner:Get-WmiObject -query "Select * from Win32_Process where name = 'notepad.exe'" | sort CreationDate -Descending | Tee-Object -Variable procs | where { $.CreationDate -gt ($procs[$procs.Count - 1]).CreationDate } | foreach { $.Terminate() } - Anonymous
May 11, 2007
if ($processes.count -le 2 )should beif ($processes.count -lt 2 )Otherwise a pair of processes will be ignored.