Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Batch script to taskkill search by "Command Line" arguments

Tags:

powershell

I need a batch script to taskkill by "Command Line" arguments ("Command Line" from Windows Task Manager). To clarify - these processes are dotnet core applications. They are started via:

dotnet MyDotnetCoreApp.dll xxx yyy

If you examine under Task Managers,

  1. Name = dotnet.exe

  2. Image path name = C:\Program Files\dotnet\dotnet.exe

  3. Command line = dotnet MyDotnetCoreApp.dll xxx yyy

I need a batch script to kill these tasks, probably with taskkill

OPTION 1 is Taskkill by PID but how my script search "Command Line" arguments for MyDotnetCoreApp?

OPTION 2 is taskkill by Image Name? This is no go as my server has many dotnet core applications, if kill my Image Name, all dotnet core processes be killed

I been researching:

https://superuser.com/questions/415360/how-do-i-find-out-command-line-arguments-of-a-running-program

https://www.itprotoday.com/powershell/powershell-contains

I can't get this to work, not good at PowerShell:

Get-WmiObject Win32_Process -Filter "name = 'dotnet.exe'" | Select-Object Handle

Here'd get a list of PIDs with which to kill.

Two challenges:

First Challenge, my WHERE clause dont work:

Get-WmiObject Win32_Process -Filter "name = 'dotnet.exe'" | where {$_.CommandLine -like '*MyDotnetCoreApp*'} | Select-Object Handle

I checked further, found out these "CommandLine" was NOT populated for these WmiObjects (omg!): Get-WmiObject Win32_Process -Filter "name = 'dotnet.exe'" | Select-Object ProcessId, Name, CSName, Caption, CommandLine, ExecutablePath

I later then found out "CommandLine" would have been populated IF you run Powershell as Administrator!?! (Powershell so cryptic!)

In the end - First challenged was resolved:

Get-WmiObject Win32_Process -Filter "name = 'dotnet.exe'" | where {$_.CommandLine -like '*MyDotnetApp*'} | Select-Object ProcessId, Name, CSName, Caption, CommandLine, ExecutablePath 

Second Challenge: How to kill it? Found it!!

(Get-WmiObject Win32_Process -Filter "name = 'dotnet.exe'" | where {$_.CommandLine -like '*MyDotnetCoreApp*'}).Terminate()

So this is actually resolved!

like image 634
user3761555 Avatar asked Nov 03 '25 13:11

user3761555


1 Answers

Run Powershell as Administrator! Download psexec from https://learn.microsoft.com/en-us/sysinternals/downloads/psexec

psexec -u Administrator -p SomeSecret powershell

Then from Powershell:

(Get-WmiObject Win32_Process -Filter "name = 'dotnet.exe'" | where {$_.CommandLine -like '*MyDotnetCoreApp*'}).Terminate()

Now as separate question, can you do this one line? Below wont work because -Filter has quotes in it!

psexec -u Administrator -p SomeSecret powershell -Command "(Get-WmiObject Win32_Process -Filter ""name = 'dotnet.exe'"" | where {$_.CommandLine -like '*MyDotnetCoreApp*'}).Terminate() "

As hacky work around, I removed -Filter clause (How unfortunate, not sure how to escape quotes):

psexec -u Administrator -p SomeSecret powershell -Command "(Get-WmiObject Win32_Process | where {$_.CommandLine -like '*MyDotnetCoreApp*'}).Terminate() "
like image 182
user3761555 Avatar answered Nov 06 '25 03:11

user3761555



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!