Terminate additional PS process

This topic contains 0 replies, has 1 voice, and was last updated by Profile photo of Forums Archives Forums Archives 5 years, 5 months ago.

  • Author
    Posts
  • #5923

    by stocksp at 2012-09-18 09:28:05

    I need to only allow one copy of my script to run, so I want to check as the first step to see if there are any other PS processes running and terminate them.
    (Get-WmiObject win32_process -Filter "name = 'powershell.exe'").Terminate()
    works great from killing the window I'm in.
    How can I terminate 'others' but not me?
    I have a simple bat file I want the user to able to run as many times as they like. only one copy of the script runs.
    Bat file is
    powershell.exe -noexit -WindowStyle Minimized C:\scripts\fileWatcherDD.ps1

    by stocksp at 2012-09-18 11:44:25

    I got this working with
    (Get-WmiObject win32_process -Filter "name = 'powershell.exe'") | foreach{if($_.ProcessId -ne $pid){$_.Terminate()}}

    by poshoholic at 2012-09-18 21:00:56

    Excellent, glad you worked it out.

    by RichardSiddaway at 2012-09-19 05:26:02

    I always like a WMI solution but you could also try this

    Get-Process -Name powershell | where {$_.Id -ne $pid} | Stop-Process

    If you want to stick with WMI you could simplify to

    Get-WmiObject -Class Win32_Process -Filter "Name='powershell.exe' AND ProcessId != $pid" | Invoke-WmiMethod -Name Terminate

You must be logged in to reply to this topic.