Уничтожение процессов из списка имен исполняемых файлов в PowerShell - PullRequest
0 голосов
/ 24 февраля 2010

У меня есть функция PowerShell, которая возвращает список имен исполняемых файлов (с расширением файла), и я пытаюсь уничтожить любое из них, если они запущены, но без особого успеха. Вот команда, которую я использую:

Get-Executable-Names `
| where { $_ -match ".exe" } `
| foreach { $_ -replace ".exe" } `
| foreach { ps $_ } `
| kill

Если я сохраню вывод Get-Executable-Names в переменной и выведу на экран его содержимое, оно отобразится как:

Path
----
A.exe
B.exe
C.exe

PowerShell сообщает об этой ошибке:

Get-Process: не удается найти процесс с именем "@ {Path = A}". Проверьте имя процесса и снова вызовите командлет.
+ $ Get-Executable-Names | where {$ _ -match ".exe"} | foreach {$ _ -replace ".exe"} | foreach {ps <<<< $ _} | убить <br> + CategoryInfo: ObjectNotFound: (@ {Path = A}: String) [Get-Process], ProcessCommandException

Похоже, что операция -replace изменяет данные канала на следующий формат:

@(Path=A)
@(Path=B)
@(Path=C)

которого я не понимаю. Я уверен, что просто неправильно понимаю объектную модель PowerShell, но что я пропускаю?

1 Ответ

2 голосов
/ 24 февраля 2010

Попробуйте добавить следующее сразу после вызова GetExecutableNames

%{ $_.Path }

Полный ответ

Get-Executable-Names 
| where { $_ -match ".exe" } 
| %{ $_.Path }
| %{ $_ -replace ".exe" } 
| %{ ps $_ } 
| kill
...