Войти

Показать полную графическую версию : [решено] убить процессы через утилиту


geepnozeex
11-03-2021, 19:23
приветствую.
есть несколько процессов, которые нужно убить с помощью утилиты - pskill (https://docs.microsoft.com/en-us/sysinternals/downloads/pskill)
в батнике я делаю так -
for %%A IN (процесс.exe процесс.exe процесс.exe) DO %~dp0\pskill64 %%A -accepteula -t
интересует аналог этого решения для powershell.

DJ Mogarych
11-03-2021, 23:11
kill -name процесс,процесс,процесс

geepnozeex
12-03-2021, 08:04
DJ Mogarych, если бы это было возможным, то я бы не прибегал к сторонней утилите.

Elven
12-03-2021, 10:12
geepnozeex, а невозможно потому, что?..

geepnozeex
12-03-2021, 10:18
Elven, отказано в доступе.
хочу сделать что-то вроде этого -
'процесс.exe','процесс.exe' | start-process "C:\pskill64" -arg "-accepteula -t"
но данные не передаются по конвейеру.

Elven
12-03-2021, 10:29
(process1.exe,process2.exe) | ForEach-Object {echo $_}
echo соответственно меняем на этот пкилл, я его не юзал потому хз как там что с ним будет.
в доступе отказано вполне вероятно из-за неповышенных прав, но это нужно смотреть и ковыряться.

geepnozeex
12-03-2021, 12:02
в доступе отказано вполне вероятно из-за неповышенных прав, но это нужно смотреть и ковыряться. »
SecurityHealthService.exe и с правами trustedinstaller не убьёшь, поэтому и использую pskill.
ещё заморочка небольшая - вот так с указанием прямого пути всё работает -
'SecurityHealthService.exe','smartscreen.exe' | Foreach{C:\pskill64 -accepteula -t $_}
но стоит использовать переменную в пути к утилите
Foreach{"$PSScriptRoot\pskill64 -accepteula -t $_"}
не работает.

Elven
12-03-2021, 14:39
Сходу не скажу, возможно пойдет вот с таким костылем, если нужно именно использование переменной.
{
Start-Process -FilePath "$PSScriptRoot\pskill64" -ArgumentList "-accepteula","-t"," $_"
}

Iska
12-03-2021, 21:37
Честно говоря, вообще не пойму, с чем проблемы.

Например, у меня pskill64.exe расположен по адресу C:\Program Files (x86)\Sysinternals.com\Sysinternals Suite, и, следовательно:
'notepad.exe', 'calc.exe' | ForEach-Object -Process {
Start-Process -FilePath ([System.IO.Path]::Combine([System.Environment]::GetFolderPath("ProgramFilesX86"), 'Sysinternals.com\Sysinternals Suite\pskill64.exe')) -ArgumentList @('-accepteula', '-t', $_)
}
что, собственно, ничем не отличается от кода коллеги Elven выше.

geepnozeex
12-03-2021, 22:27
Честно говоря, вообще не пойму, с чем проблемы. »
проблема была в использовании переменной $PSScriptRoot вместо указанного пути к pskill
Я так сделал -
'SecurityHealthService.exe','SecurityHealthSystray.exe','smartscreen.exe' | %{&"$PSScriptRoot\pskill" "-accepteula" "-t" "$_"}

а без переменной работает так -
%{C:\pskill64 -accepteula -t $_}




© OSzone.net 2001-2012