我有一个创建窗口的函数 - 一个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
答案 0 :(得分:2)
Walid的回答是有效的,但它会返回一个匹配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
这将从代码中扩展进程ID并将其放入get-process cmdlet的-pid
。
一个更优雅的解决方案可能是这个
$processToLocate = Select-Window *Online video* | Where {$_.Title -like "*$WindowTitle*"} | Select-Object -first 1 -ExpandProperty ProcessID
Get-Process -Pid $processToLocate
这应该做同样的事情。可能更容易阅读。只需使用-ExpandProperty
代替(Object).Property
。在两种情况下都实现了相同的目标。
或强>
Walid在评论中提出的建议也有效
Select-Window *Online video* | Where {$_.Title -like "*$WindowTitle*"} | Select-Object -first 1 | Get-Process -PID {$_.ProcessID}
总是那样只能在foreach这样的东西中使用$_
。谢谢你的提示。
答案 1 :(得分:1)
如果工作,请尝试此操作:
....$WindowTitle*"} | get-process |Select-Object ..