Получить объект Process за окном в WASP/powershell?

У меня есть функция, которая делает окно - TOPMOST.

Итак - я могу запустить это:

Get-WindowByProcessTitle *chrome* | Set-TopMost

Обратите внимание, что аргумент здесь - это имя процесса ("chrome" в "chrome.exe" какой процесс).

Внутренний код, который окончательно выбирает процесс:

Get-Process |  Where-Object {$_.MainWindowTitle -like "*chrome*"} | Select-Object Id,Name,MainWindowHandle,MainWindowTitle

Отлично.

Вопрос

Теперь у меня есть запрос, который выберите window в соответствии с его title:

Select-Window *chrome* |  Where {$_.Title  -like "*$WindowTitle*"} | Select-Object -first 1  

Который дает:

ProcessName : chrome
ProcessId   : 3972
IsActive    : False
Handle      : 1641684
Title       : Watch Full movie The Beach (2000) Online Free | FFilms.org - Google Chrome
Class       : Chrome_WidgetWin_1

Как я могу получить объект процесса (не ProcessId) из этого моего запроса?

Я думаю, что мне нужно что-то вроде: (псевдо)

Select-Window *chrome* |  Where {$_.Title  -like "*$WindowTitle*"} |What_Is_MyProcess_Object? |Select-Object Id,Name,MainWindowHandle,MainWindowTitle

2 ответа

Решение

Ответ Валида действителен, но он вернет объект с соответствующими процессами ProcessName, Вы ищете матч с одним processId

Если вам не нужны другие данные, вы можете просто выбрать ProcessID

Из вашего фрагмента кода:

Select-Window *Online video* |  Where {$_.Title  -like "*$WindowTitle*"} | Select-Object -first 1  

Просто поместите этот код прямо в вызов Get-Process.

Get-Process -Pid (Select-Window *Online video* |  Where {$_.Title  -like "*$WindowTitle*"} | Select-Object -first 1 ).ProcessID

Это расширит идентификатор процесса из вашего кода и поместит его в -pid командлета get-process. Более элегантным решением может быть это

$processToLocate = Select-Window *Online video* |  Where {$_.Title  -like "*$WindowTitle*"} | Select-Object -first 1 -ExpandProperty ProcessID
Get-Process -Pid $processToLocate

Это должно сделать то же самое. Просто может быть легче читать. Просто использует -ExpandProperty вместо (Object).Property, Одна и та же цель достигается в обоих случаях.

Или же

Предложение Валида из комментариев также будет работать

Select-Window *Online video* |  Where {$_.Title  -like "*$WindowTitle*"} | Select-Object -first 1  | Get-Process -PID {$_.ProcessID}

Всегда, хотя это могло бы использовать только $_ в чем-то вроде foreach. Спасибо за чаевые.

Попробуйте это, если работа:

....$WindowTitle*"} | get-process |Select-Object ..
Другие вопросы по тегам