Получить объект 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 ..