在WASP / powershell中按窗口获取Process对象?

时间:2014-09-14 11:06:04

标签: powershell wasp

我有一个创建窗口的函数 - 一个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 个答案:

答案 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 ..