我们有一个限制性许可的ERP应用程序,我们可以通过RemoteApp访问。我们只需要为每个用户允许一个实例。所以,我一直在尝试使用PowerShell来尝试这样做。
脚本要做的是检查" pxxi.exe"正在为主叫用户运行。
我的第一次尝试使用了WMI。它有效,但事实证明WMI非常慢。
(gwmi win32_process -Filter" name =' pxxi.exe'" |?{$ _。getowner()。user -eq $ env:username})。pid
我的第二次尝试使用了Get-Process。这很有效,但不幸的是需要提升权利。
Get-Process pxxi -IncludeUserName | ? {$ _。用户名-match $ env:username})。id
我的第三次尝试集中在win32命令行程序Tasklist。
$ result = Invoke-Command {c:\ windows \ system32 \ tasklist.exe / fi "用户名eq $ env:用户名" / fi" imagename eq pxxi.exe"}
这个有效!感谢EBGreen的代码,我只能提取PID。
($result[3] -split '\s+')[1]
虽然作为管理员运行速度非常快,但对于普通用户来说,任务列表的运行速度与WMI一样慢,高于......
所以,这让我回到原点。
有没有人知道一些代码可以快速检查并查看用户XYZ是否正在运行名为ABC.EXE的进程?这需要适用于普通用户(但普通用户不需要查看其他用户的流程),并且运行时间不需要超过30秒。
我没有和powershell结婚。 VBScript会好的。或者互联网上的任何小工具。
谢谢!
答案 0 :(得分:0)
对于您拥有的示例:
($result[3] -split '\s+')[1]
请注意,这仅适用于返回的一个结果。如果你期望有多个实例,那么你应该编写一个循环来迭代数组中的第4项,分割每个项目以获得该进程的PID。
答案 1 :(得分:0)
我放弃了试图在Powershell中找到一种方法。要么方法太慢,要么需要管理员。
所以我用C#写了一些东西: c# - check if program is running for current user