gpt4 book ai didi

powershell - 在 WASP/powershell 中通过窗口获取进程对象?

转载 作者:行者123 更新时间:2023-12-02 23:28:28 24 4
gpt4 key购买 nike

我有一个函数可以创建一个窗口 - 一个 TOPMOST 窗口。

所以 - 我可以运行这个:

Get-WindowByProcessTitle *chrome* |置顶

注意这里的参数是一个进程名称("chrome""chrome.exe" 中,这是进程)。

最终选择进程的内部代码是:

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

很好。

问题

现在我有一个查询,它根据 title 选择一个 window :

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

最佳答案

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 之类的东西中使用 $_。谢谢你的提示。

关于powershell - 在 WASP/powershell 中通过窗口获取进程对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25832581/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com