Пакетный скрипт для поиска заданий по аргументам «Командная строка» - PullRequest
0 голосов
/ 21 февраля 2019

Мне нужен пакетный скрипт для Taskkill с помощью «Командная строка» аргументов («Командная строка» из диспетчера задач Windows).Чтобы уточнить - это процессы dotnet core приложения.Они запускаются через:

dotnet MyDotnetCoreApp.dll xxx гггг

Если вы изучите в разделе «Менеджеры задач»,

  1. Имя =dotnet.exe

  2. Имя пути к изображению = C: \ Program Files \ dotnet \ dotnet.exe

  3. Командная строка = dotnet MyDotnetCoreApp.dll xxxггг

Мне нужен пакетный скрипт для уничтожения этих задач, вероятно, с taskkill

OPTION 1 - это Taskkill по PIDно как мой сценарий поиска «Командная строка» аргументы для MyDotnetCoreApp?

ОПЦИЯ 2 является Taskkill по имени изображения?Это не пойдет, так как на моем сервере есть много приложений ядра dotnet, если убить мое имя образа, все процессы ядра dotnet будут убиты

Я исследовал:

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

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

Я не могу заставить это работать, не очень хорошо в PowerShell :

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

Здесь можно получить список PID, с которыми нужно убить.

Две задачи:

Первый вызов , мое предложение WHERE не работает:

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

Я проверил дальше, обнаружил эти "CommandLine"НЕ был заполнен для этих объектов WmiObject (о боже!): Get-WmiObject Win32_Process -Filter "name = 'dotnet.exe'" |Select-Object ProcessId, Name, CSName, Caption, CommandLine, ExecutablePath

Позже я узнал, что «CommandLine» будет заполнен, если вы запустите Powershell от имени администратора !?!(Powershell такой загадочный!)

В конце - Первый вызов был решен :

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

Второй вызов : Как его убить? Нашел это !!

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

Так что это на самом деле решено!

Ответы [ 2 ]

0 голосов
/ 22 февраля 2019

Работает у меня как у обычного пользователя, разве процесс запущен от имени администратора ?.К сожалению, здесь синтаксис фильтра похож на sql, где «%» - это подстановочный знак.Трубопровод туда, где-объект, вероятно, будет работать так же хорошо.

get-wmiobject win32_process -filter "commandline like '%dotnet.exe%MyDotnetCoreApp%'" | 
  remove-wmiobject

get-wmiobject win32_process | where commandline -like '*dotnet.exe*MyDotnetCoreApp*' | 
  remove-wmiobject
0 голосов
/ 21 февраля 2019

Запустите Powershell от имени администратора!Скачать psexec с https://docs.microsoft.com/en-us/sysinternals/downloads/psexec

psexec -u Administrator -p SomeSecret powershell

Затем с Powershell :

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

Теперь, как отдельный вопрос, вы можете сделать этолиния?Ниже не будет работать, потому что -Filter содержит кавычки!

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

В качестве хакерской работы я удалил предложение -Filter (Как жаль, не уверен, как избежать кавычек):

psexec -u Administrator -p SomeSecret powershell -Command "(Get-WmiObject Win32_Process | where {$_.CommandLine -like '*MyDotnetCoreApp*'}).Terminate() "
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...