Powershell закрывает несколько окон / завершает процессы на основе имени - PullRequest
0 голосов
/ 31 мая 2018

У меня довольно аккуратный беспорядок пакетных / python-скриптов, которые устанавливают программу под названием MATRIS, после чего следуют около 15 exe-обновлений.Около 11 из этих обновлений открывают окно, сообщающее, что обновление прошло успешно.


Теперь было бы очень интересно запустить пакетный сценарий или скрипт powershell, который закрывает все эти окна для меня.Последнее, что я попробовал, было Get-Process | Where-Object {$_.Path -like "MatrisInstaller.APCIPLUS"} | Stop-Process -WhatIf. Я не был уверен, было ли это имя прочитанным в диспетчере задач или как заголовок окна, но я попробовал оба.Capture of the window and task manager

Обратите внимание, что некоторые из них (32-разрядные) - я не уверен, повлияет ли это на сценарий.

Я смог запустить tasklist, а затем kill {PID}, но PID изменились: я не знаю, как его написать.

Пожалуйста, ответьте, если вам нужны какие-либо пояснения, яисторически плохо формулировал мои вопросы.

Ответы [ 2 ]

0 голосов
/ 31 мая 2018

В вашем примере Path указывает на исполняемый файл на диске, поэтому, хотя его можно использовать (если он согласован), он не будет совпадать с именем, которое вы найдете на вкладке процессов диспетчера задач.Как правило, люди будут использовать имя, как показано на вкладке Сведения в диспетчере задач.Например, с Outlook в моей системе, эти три возможности:

Path: C:\Program Files\Microsoft Office\Office16\OUTLOOK.EXE
Processes tab: Microsoft Outlook
Details tab: outlook.exe

Итак, вам нужна команда, подобная этой:

Get-Process | Where Name -eq 'Outlook' | Stop-Process

или, лучше:

Get-Process -Name 'Outlook' | Stop-Process

Обратите внимание, что PowerShell ожидает, что вы удалите «.exe», который вы видите в диспетчере задач.

РЕДАКТИРОВАТЬ: дополнительная техника

Если вы знаете именапроцессы, то вы можете упростить ваш сценарий, выполнив что-то вроде этого:

$processList = "Process1","Process2","Process3" # Add all process names to the list

$processList |
    ForEach-Object {
        Get-Process -Name $_ | Stop-Process
    }
0 голосов
/ 31 мая 2018

Вы были почти там, просто нужно изменить «Путь» на «ProcessName» следующим образом:

Get-Process | Where-Object {$_.ProcessName -like "MatrisInstaller.APCIPLUS"} | Stop-Process -WhatIf
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...