У меня есть функция 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, но что я пропускаю?